double+pow函数p2109
来源:互联网 发布:php运行环境配置 编辑:程序博客网 时间:2024/05/16 12:11
作者:转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299228474
double的范围很大啊,不过也没用过。。。精确度不高啊。。
#include<iostream>
#include<math.h>
using namespacestd;
int main(void)
{
double n,p;
while(cin>>n>>p)
cout<<pow(p,1.0/n)<<endl; //指数的倒数就是开n次方
return0;
}
一般思路:二分+高精度算法
但是本题还有一个更加巧妙的办法去处理:
首先需要明确:double类型虽然能表示10^(-307) ~ 10^308, (远大于题意的1<=p<10101这个范围),但只能精确前16位,因此必须慎用!
那么为了避免double对输入的数在运算过程中进行精确,那么我们必须让double的运算第一步就得到一个int(即小数点尾数全为0),这个不难理解。
然后根据题意,是求指数k,一般人自然想到利用 对数log,即k=lognp。但是不要忘记使用对数最大的问题就是没有lognp函数,只有log()函数(底数为e),为此要计算lognp就必须使用换底公式lognp=log(p)/log(n),即k= log(p)/log(n),由于这使得double的运算变为了3次,而且执行除法前的两次对数运算log的结果未必都是int,很显然k是一个被精确了的double
很多人到这里就放弃了使用double,转换方向到正常思路(二分+高精度算法),但是不要忘记求指数k除了使用对数log,还能使用指数的倒数开n次方,这时就可以用pow函数了
k=pow(p,1.0/n),double的运算一步到位,k自然也是一个int
- double+pow函数p2109
- C/C++中的数学函数double pow( double x, double y )
- pow函数与sqrt函数的返回值为double型
- pow函数
- pow ()函数
- pow()函数
- pow函数
- pow函数
- pow()函数
- pow函数
- pow函数
- pow(double a,int b)
- Pow(double x, int n)
- pow(double x,int n)
- pow的返回值是double型
- pow(double a,int b) [No. 41]
- 自己实现pow(double base, unsigned exponent)
- 实现pow(double x, int n)
- Minimum Absolute Difference in BST
- 疯狂Java笔记:3.7 运算符
- 向文档中添加列表项
- servlet相关配置及会话跟踪技术
- HDU 2084
- double+pow函数p2109
- Servlet生命周期与工作原理
- BZOJ 2795:[Poi2012]A Horrible Poem
- 3. Longest Substring Without Repeating Characters Medium
- Python sorted
- 8.PHP图像处理
- Codeforces 645C:Enduring Exodus (二分+前缀和)
- hibernate配置oracle生成序列结果为负数
- 328. Odd Even Linked List(unsolved)