将 2^1024 表示为浮点数



2^1024 可以用内置的浮点类型表示吗,例如双精度或长双精度?

2^1024 可以用内置的浮点类型表示吗,例如双精度或长双精度?

21024的值为 1.797693134862315907729...*10308

下面能够打印出 21024的近似值作为long double。 然而,这个值通常超过最大有限doubleDBL_MAX。 表示 21024的能力取决于实现。 下面是一个常见的实现。

#include <float.h>
#include <math.h>
#include <stdio.h>
int main(void) {
long double two1024 = powl(2,1024);
printf("2^1024  %.21Len", two1024);
printf("DBL_MAX %.21Len", DBL_MAX*1.0L);
return 0;
}

输出

v----- Difference begins here
2^1024  1.797693134862315907729e+308
DBL_MAX 1.797693134862315708145e+308

注:
C只要求LDBL_MAX >= DBL_MAX >= 1.0e+37
DBL_MAX通常是二进制64或~1.7976931348623157...e+308的最大有限值。
在某些系统上,long double范围与double范围匹配。

2^1024 大于 IEEE 使用 64 位计算机表示的最大浮点值。

2^1024 =

17976931348623159077293051907890247336179769789423065727343008115773267580550096313270847
73224075360211201138798713933576587897688144166224928474306394741243777678934248654852763
02219601246094119453082952085005768838150682342462881473913110540827237163350510684586298
239947245938479716304835356329624224137216 

最大 IEEE 浮点数,约 1.7977*10^308 =

0 11111111110 1111111111111111111111111111111111111111111111111111(b( =

17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955
86327668781715404589535143824642343213268894641827684675467035375169860499105765512820762
45490090389328944075868508455133942304583236903222948165808559332123348274797826204144723
168738177180919299881250404026184124858368

这些数字的差异为:

19958403095347198116563727130368385660674512604354575415025472424372118918689640657849579
65492635701089342446844192495243972437988393593660739171798284831420320005672951085676517
53772144436298718265335674454392399333081045512087038888885526844804415750712090687575604
16423584952303440099278848

这是最大的 IEEE 数字,因为 64 位细分如下:

1 - sign
11 - exponent
52 - mantissa, or value

对于双精度类型,指数偏差为 1023。请注意:11111111110(b( = 2046(d(。2046 - 1023 = 1023。这只是您需要存储 1024 的 2^1024 以及为什么 2^1023 工作正常。

最新更新