首页 > 解决方案 > 在 C++ 中打印 pow() 函数的精确值

问题描述

在此处输入图像描述我的输出出错了。我想我选错了。请帮帮我。

    int n;
    cin>>n;
    unsigned long long int a,s;
    cin>>a;
    s=(2*pow(10,n)+a);

但是当我给出大n的赞17或者18我的输出s没有按预期出现时。查看图像以获取输出,例如:何时n=17a=67576676767676788那么s=267576676767676800理想情况下应该是 2*10^17 + 67576676767676788

标签: c++type-conversionpowcmath

解决方案


首先,您必须了解正在发生的事情。

  1. 为了能够使用std::pow编译器进行静默转换,将整数类型转换为double并且返回值也是 a double
  2. 注意double有 16 位有效数字(十进制表示)
  3. 当您执行 to 的赋值转换时doublelong long int会静默执行
  4. unsigned long long int如果此类型有 64 位,则 10 的最大幂为 19

现在,如果您超出此限制,则应使用外部库。gmp很不错。

unsigned long long int如果可以接受仅实现您自己的幂函数的范围的限制。


推荐阅读