【问题标题】:Calculation using power function gave wrong answers for large numbers使用幂函数计算对大数给出错误答案
【发布时间】:2018-01-23 14:19:07
【问题描述】:

我有两个值 p=19, q=14。我想使用幂函数pow(p, q) 计算 pq

这是我的代码:

long long p=19,q=14;
cout<<pow(p,q);

正确答案是:799006685782884121,但我的代码给出了 799006685782884096,这是不正确的。

我也尝试使用unsigned long long 而不是long long 进行这些计算,但这没有帮助。

【问题讨论】:

标签: c++ c++11 math


【解决方案1】:

pow 函数定义为:

double pow(double x, double y);

这意味着它接受浮点参数并返回浮点结果。由于浮点数的性质,有些数字无法准确表示。您得到的结果可能是最接近的匹配。

另请注意,您正在进行两次(可能有损)转换:

  • 将参数从long long 转换为double,并且
  • 将函数的结果从double 转换为long long

【讨论】:

  • 仍然得到相同的结果,你能告诉我吗
  • @RakeshSharma 如果您使用的是 MSVC,则 long doubledouble 相同,无法精确存储所有 64 位 int
  • @RakeshSharma 你得到了多个很好的答案。你读过它们吗?你还有什么不明白的?
  • double 只能存储 54 位或 17 位十进制数字,精度不限。
  • @GemTaylor 它是 53 位和 ~15-17 位,而不是 54
猜你喜欢
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 2015-08-24
  • 2011-07-02
相关资源
最近更新 更多