在 C++ 标准中,它提到了浮动文字:
如果缩放值不在其类型的可表示值范围内,则程序格式错误。
缩放值是有效部分乘以 10 ^ 指数部分。
在 x86-64 下:
float
是单精度 IEEE-754double
是双精度 IEEE-754long double
是 80 位扩展精度 IEEE-754
在这种情况下,这三种类型的可代表值的范围是多少?这是在哪里记录的?或者它是如何计算的?
在 C++ 标准中,它提到了浮动文字:
如果缩放值不在其类型的可表示值范围内,则程序格式错误。
缩放值是有效部分乘以 10 ^ 指数部分。
在 x86-64 下:
float
是单精度 IEEE-754double
是双精度 IEEE-754long double
是 80 位扩展精度 IEEE-754在这种情况下,这三种类型的可代表值的范围是多少?这是在哪里记录的?或者它是如何计算的?
如果您知道指数位数和尾数位数,那么根据IEEE-754 格式,可以确定最大绝对可表示值为:
2^(2^(E-1)-1)) * (1 + (2^M-1)/2^M)
最小绝对值(不包括零或非正规)是:
2^(2-2^(E-1))
E
是 8,M
是 23。E
是 11,M
是 52。答案(如果您使用的是具有 IEEE 浮点的机器)在float.h
. FLT_MAX
,DBL_MAX
和LDBL_MAX
. 在完全支持 IEEE 的系统上,大约是 3.4e+38、1.8E+308 和 1.2E4932。(确切的值可能会有所不同,并且可能会以不同的方式表达,具体取决于编译器如何进行输入和舍入。例如,g++ 将它们定义为编译器内置函数。)
编辑:
WRT 你的问题(因为我和其他响应者都没有真正回答它):可表示值的范围是
,其中
之一是、或。[-type_MAX...type]
type
FLT
DBL
LDBL
我一直在寻找最大的 64 位可表示数字,并最终制作了我自己的 500 位浮点计算器。如果所有 64 位都打开,这就是我想出的
18,446,744,073,709,551,615
18 千亿 446 千亿 744 万亿 730 亿 7.09 亿 55.1 万 615