ICPC2018 Nakhon Pathom-Floating-Point Hazard(浮点数的坏处)(导数的定义)

Given the value of low, high you will have to find the value of the following expression: 

给你下界和上界的值,你得算出以下表达式的值:

If you try to find the value of the above expression in a straightforward way, the answer may be incorrect due to precision error. 

如果你对以上表达式进行直接计算,那么答案很有可能因为精度误差而错误。

输入

The input file contains at most 2000 lines of inputs. Each line contains two integers which denote the value of low, high (1 ≤ low ≤ high ≤ 2000000000 and high-low ≤ 10000). Input is terminated by a line containing two zeroes. This line should not be processed.  

输入文件包含至多2000条输入,每一行包含两个整数,代表下界和上界。输入以一行内的两个0结束,并不作处理。

输出

For each line of input produce one line of output. This line should contain the value of the expression above in exponential format. The mantissa part should have one digit before the decimal point and be rounded to five digits after the decimal point.  To be more specific the output should be of the form d.dddddE-ddd, here d means a decimal digit and E means power of 10. Look at the output for sample input for details. Your output should follow the same pattern as shown below. 

对于每一组输入,输出一行答案。这行内应当包含一个以指数形式(科学计数法)表示的求得的上述表达式的值。尾数部分应当在保留一位数字,并在小数点后保留五位小数。更准确的说输出应当是d.dddddE-ddd的形式,d代表一个数字,e代表10的幂。细节部分请观察样例输出。你的输出应该和下列的样例模式上对应。

输入

1 100
10000 20000
0 0

输出

3.83346E-015
5.60041E-015

这个题每个高中毕业的人都会做,只不过这个题干不说人话罢了。以我们熟悉的形式翻译一下:

给定函数:f(x)=\sqrt[3]{x+10^{-15}}-\sqrt[3]{x},设该函数在定义域上连续可导,给定区间上界为b,下界为a。

对于任意整数x∈[a,b],当x从a连续变化到b时,求f(x)的函数值的和。

 

这个原函数的形式像极了导数定义式的上半部分:f'(x)=\frac{f(x+\Delta x)-f(x)}{\Delta x},当\Delta x趋近于无穷小时,我们称此处的值为函数f(x)在x处的导数。根据原式,我们断定\Delta x=10^{-15},由于这个数足够小,我们可以认为其为无穷小。

根据求导公式可知:f'(x)=\frac{f(x+10^{-15})-f(x)}{10^{-15}}=(x^{\frac{1}{3}})' =\frac{1}{3}x^{-\frac{2}{3}},两边同乘10^{-15}可以得到原表达式,对整式右边的函数进行计算即可。

所以有如下思路:

  1. 求得等价函数,进行求和
  2. 将求得的和进行处理,直至满足答案形式

代码如下:

#include <iostream>
#include <cstdio>
#include <bits/stdc++.h>
#include <map>
#include <algorithm>
#include <stack>
#include <iomanip>
#include <cstring>
#include <cmath>
#define DETERMINATION main
#define lldin(a) scanf("%lld",&a)
#define din(a) scanf("%d",&a)
#define printlnlld(a) printf("%lld\n",a)
#define printlnd(a) printf("%d\n",a)
#define printlld(a) printf("%lld",a)
#define printd(a) printf("%d",a)
#define reset(a,b) memset(a,b,sizeof(a))
const long long int INF=0x3f3f3f3f;
using namespace std;
const double PI=acos(-1);
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int mod=1000000007;
const int tool_const=1999112620000907;
const int tool_const2=33;
inline ll lldcin()
{
    ll tmp=0,si=1;
    char c=getchar();
    while(c>'9'||c<'0')
    {
        if(c=='-')
            si=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9')
    {
        tmp=tmp*10+c-'0';
        c=getchar();
    }
    return si*tmp;
}
///Schlacht von Stalingrad
/**Although there will be many obstructs ahead,
the desire for victory still fills you with determination..**/
int DETERMINATION()
{
    ll x1,x2;
    while(cin>>x1>>x2&&(x1+x2))
    {
        ld sum=0;
        for(int i=x1;i<=x2;i++)
            sum+=pow(i,-2.0/3)/3;
        ll final_power=15;//这是最后的指数
        while(sum>10)
        {
            final_power--;
            sum/=10;
        }
        while(sum<1)
        {
            final_power++;
            sum*=10;
        }
        cout<<fixed<<setprecision(5)<<sum<<"E-";
        cout<<setw(3)<<setfill('0')<<final_power<<endl;
    }
    return 0;

 

技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值