c++ - 在C++中打印pow()函数的精确值

标签 c++ type-conversion pow cmath

enter image description here我的输出出错。我想我选错了。请帮帮我。

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

但是当我给出像n17这样的大18时,我的输出s却没有达到预期的效果。
见图像输出
例如:当n=17a=67576676767676788时,则为s=267576676767676800,理想情况下应为2*10^17 + 67576676767676788

最佳答案

首先,您必须了解发生了什么。

  • 为了能够使用std::pow编译器,它会进行静默转换,将整数类型转换为double,返回的值也是double
  • 请注意double具有16个有效数字(以十进制表示)
  • 进行doublelong long int的赋值转换时,将默默执行
  • unsigned long long int(如果此类型具有64位),则最大功率10为19

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

    如果可接受unsigned long long int范围的限制,则只需实现自己的幂函数即可。

    关于c++ - 在C++中打印pow()函数的精确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59688700/

    相关文章:

    c++ - 分配数组与初始化指针

    c++ - 放弃root权限?

    c# - Long.Tryparse 重载和转换错误 C#

    c++ - 不使用 stringstream 将 char* 转换为任意数字类型

    java - 查找a^3 + b^3 = c^3 + d^3的所有结果,Math.pow()方法引起的问题

    C++ 无序映射

    MySQL 的 C++ 绑定(bind)

    java - 尝试用java编写科学计算器,但无法使指数按钮工作

    javascript - javascript 中的自动转换 : Isn't it supposed to convert a string to a number when done like stringvar = 1+stringvar?

    c - 为什么我在自己的第 n 根代码中得到这个结果?