C++ : correct way to calculate power for large no

标签 c++ double

我正在尝试使用 C++ 计算 65^17。 我写了下面的代码但是在 65^11 时得到了错误的值。 计算答案的正确方法是什么? (即 65^17)

代码:

long double data= 1;
int m_ne=17;
int i_data=65;
for(int i=1;i<= m_ne;i++)
{
     data =  data  * (i_data);
     std::cout.precision(15);
     std::cout<<" "<<std::fixed <<data<<std::endl;
 }

输出:

65.000000000000000
 4225.000000000000000
 274625.000000000000000
 17850625.000000000000000
 1160290625.000000000000000
 75418890625.000000000000000
 4902227890625.000000000000000
 318644812890625.000000000000000
 20711912837890625.000000000000000
 1346274334462890625.000000000000000
 87507831740087890624.000000000000000

我尝试了以下选项,但都是徒劳的

1. data = floor( data +0.5) * i_data ;        

2. data = floor( data +0.5) * floor (i_data + 0.5 ) ;        
By declaring i_data as float .

3.
data =  data * i_data ;        
data = floor ( data + 0.5 )

我阅读了有关 double 的帖子,但我没有得到解决方案。

最佳答案

C++ 本身不支持您尝试使用其标准数据类型执行的操作。您至少需要 104 位来表示从 0 到 67^17 的每个整数。

如果您觉得一个近似值对您来说已经足够好了,您可以做的最好的事情就是使用包含的幂函数的 long double 版本:

#include <cmath>

::std::cout << ::std::powl(65, 17) << ::std::endl;

但是你不会得到正确的输出,因为 65^17 是奇数(最后一个十进制数字是 5),因此需要一个至少有 104 位尾数的浮点类型(long double 通常没有)。

要得到正确答案,需要使用更高精度的库,例如GMP ,它的类型可以容纳超过您需要的 104 位,并提供自己的快速求幂函数,如 this .

关于C++ : correct way to calculate power for large no,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16581975/

相关文章:

c++ - 将自身传递给其他类的构造函数的类,两者均使用模板定义

c++ - 简单循环不适用于随机数

nsstring - 为什么在转换为 float 或 double 时出现 EXC_BAD_ACCESS 错误? (在 swift 中)

swift - 从双变量中获取小数点后的值

c++ - 指向指针 : managing strings for different languages 的指针数组

c++ - MsiGetTargetPath C++

c++ - Qt中如何使用MS access?

c++ - Array of arrays of string 正确声明

c - C 中的 double - 打印 50 位有效数字会产生不准确的值

java - 方括号是什么意思?在 java