将2 ^ 1024表示为浮点数

时间:2018-06-19 14:19:02

标签: floating-point

能否使用内置浮点类型(例如double或long-double)来表示2 ^ 1024?

2 个答案:

答案 0 :(得分:1)

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。这与您需要存储2 ^ 1024以及要为什么2 ^ 1023可以正常工作的1024相差。

答案 1 :(得分:1)

  

2 ^ 1024是否可以使用内置浮点类型(例如double或long-double)来表示?

2 1024 的值为1.797693134862315907729 ... * 10 308

以下内容可以将近似值2 1024 打印为long double。但是,此值通常超过最大有限doubleDBL_MAX。表示2 1024 的能力取决于实现。。以下是一个常见的实现。

#include <float.h>
#include <math.h>
#include <stdio.h>
int main(void) {
  long double two1024 = powl(2,1024);
  printf("2^1024  %.21Le\n", two1024);
  printf("DBL_MAX %.21Le\n", 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通常是binary64的最大有限值,即〜1.7976931348623157 ... e + 308。
在某些系统上,long double范围与double范围匹配。