C的pow()函数如何输出精确的2 ^ 1023值而没有任何精度损失?

时间:2017-08-05 13:49:22

标签: c output math.h

以下程序如何在没有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

1 个答案:

答案 0 :(得分:9)

两个幂只需要单位精度。尾数只有1(相当于2的幂次幂。)

考虑一下:这是因为二进制表示的 base 2。在您习惯作为人类使用的基础10中,任何10的幂都只需要一个数字,例如1000000 = 1 * 10^6

1023的指数以二进制表示法(11 1111 1111)有10位,因此只要实现中double的表示至少有11位(还有一位是对于指数而言, sign 所需要的,这个数字可以准确表示并不奇怪。