这段代码如何适用于更大范围的数字?

时间:2016-02-21 09:55:11

标签: c

如果d的范围是1 <= d <= 10 ^ 101并且n是1 <= n <= 200,则双倍范围是2.3E-308到1.7E + 308。当我将输入11111111111111111111作为d时,当我向终端显示值时,值d变为11111111111111111000.000。这意味着它无法正确接受输入,那么它将如何为10 ^ 101提供正确的值。我需要知道d的第n个根。 d将始终采用p = k ^ n的形式。这就是我添加pow功能以了解第n个根的原因。但问题是p的范围很大。我正在尝试的是解决这个问题 Power of Cryptography

int main(){

 double d,n;

 scanf("%lf%lf", &n, &d))
 {
     printf("%lf\n", pow(d, 1/n));
 }

  return 0;
}

1 个答案:

答案 0 :(得分:4)

double精度数不能保存2.3E-308到1.7E + 308之间的所有值,它能够将这些数字之间的值保持在大约15位小数的精度。< / p>

这意味着某些数字(例如您的示例)需要比8字节数据可以存储的更精确。