以下程序如何在没有C语言精度损失的情况下打印2 ^ 1023的确切值?
#include <stdio.h>
#include<math.h>
int main()
{
// Printing the value of 2 ^1023
printf("%.0f",pow(2,1023));
return 0;
}
输出:89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608
答案 0 :(得分:9)
两个幂只需要单位精度。尾数只有1
(相当于2的幂次幂。)
考虑一下:这是因为二进制表示的 base 是2
。在您习惯作为人类使用的基础10
中,任何10的幂都只需要一个数字,例如1000000 = 1 * 10^6
。
1023
的指数以二进制表示法(11 1111 1111
)有10位,因此只要实现中double
的表示至少有11位(还有一位是对于指数而言, sign 所需要的,这个数字可以准确表示并不奇怪。