使用double时精度损失
Loss of precision while working with double
我们能处理10^308以内的大数吗?如何用双精度来计算11的105次方?
式(11^105)的答案为:22193813979407164354224423199022080924541468040973950575246733562521125229836087036788826138225193142654907051
有可能得到11^105的正确结果吗?据我所知double可以处理10^308比11^105大得多。我知道这段代码是错误的:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
double n, p, x;
cin >> n >> p;
//scanf("%lf %lf", &n,&p);
x = exp(log((double)n)*p);
//printf("%lfn", x);
cout << x <<endl;
return 0;
}
谢谢。
double
通常有11bit的exp(-1022~1023归一化),52bit的fact和1bit的sign。因此,不能准确地表示11^105。
更多说明,参见Wikipedia上的IEEE 754
Double可以保存非常大的结果,但精度不高。与定点数相比,double是浮点实数。这意味着,对于相同的精度,double可以移动基数来处理不同的数字范围,从而您看到高范围。
对于您的目的,您需要一些自制的大型库,或者您可以找到一个现成的并且由其他人编写的库。
顺便说一句,我的家常菜给出了不同的答案11105用这个haskell代码确认
相关文章:
- 如何检测 std::vector::emplace_back 上的隐式转换损失整数精度
- int 到浮点转换的精度损失
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 在不损失精度的情况下将double从C++传输到python
- 禁止具有精度损失的整数转换
- 添加双精度时精度损失
- ceil、floor 和 round 在转换为整数时会遇到精度损失问题吗?
- 精度损失
- 精度损失(分配)
- 在C++中使用 pow 时精度损失
- 从浮子到双精度,从双精度到浮子的精度损失
- 将字符串转换为双精度,然后将双精度转换为字符串,而不会损失精度
- 处理在减去两个彼此接近的双精度时的精度损失
- 精度损失
- 在C++中将双精度转换为字符串时精度损失
- 在C++中标记双精度损失的算法不会标记正确的位置
- 如果可以接受一些精度损失,如何快速紧凑地保存双精度矩阵
- 编译器不会警告精度损失
- 这种精度损失发生在哪里以及如何防止
- 在 c++ 中将双精度转换为整数损失 1