32位,64位和80位浮点IEEE-754的可表示值范围
Range of representable values of 32-bit, 64-bit and 80-bit float IEEE-754?
在c++标准中,它说浮动字面值:
如果缩放后的值不在其类型的可表示值范围内,则程序是病态的。
缩放后的值是有效部分乘以10 ^指数部分。
在x86 - 64:
-
float
是单精度IEEE-754 -
double
是双精度IEEE-754 -
long 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。 - 对于扩展精度,我不确定。如果你指的是x87 FPU的80位精度,那么据我所知,它不符合IEEE-754标准……
答案(如果您在IEEE浮点计算机上)是在float.h
。FLT_MAX
, DBL_MAX
, LDBL_MAX
。在系统上在完全支持IEEE的情况下,大约是3.4e+38, 1.8E+308和1.2 e4932。(准确的数值可能会有所不同,也可能会有所不同不同的,取决于编译器如何处理它的输入和舍入。例如,c++将它们定义为编译器内置模板。)
WRT你的问题(因为我和其他响应者都没有。实际上回答它):可表示值的范围是[-type_MAX...type]
,其中type
为FLT
、DBL
、LDBL
中的一种。
我一直在寻找64位以内最大的可表示数,最后我制作了自己的500位浮点计算器。这是我得到的如果所有64位都打开
18446744073709551615年18千万亿446千万亿744万亿730亿709亿551万615
相关文章:
- 十六进制到浮点数 IEEE 754 双精度 c++
- 在C++中编写符合 IEEE-754 标准的双/浮子除法的最快方法是什么?
- NAN繁殖和IEEE 754标准
- 是浮点操作,导致IEC 559/IEEE 754浮点类类型的无限行为
- 浮点字面至IEEE-754二进制图案跨编译器的二元模式一致性
- IEEE 754浮点数学操作
- 如果遵循IEEE 754的两种语言,则两种语言的计算都会产生相同的答案
- 具有 IEEE 754 浮点双精度数据类型的安全往返整数值
- 使用iEEE 754从字符数组中恢复双倍值
- 如何在C++中将十六进制转换为IEEE 754 32位浮点
- 可推力处理半精度浮子(float16/IEEE 754-2008)
- IEEE 754/iec 559
- IEEE-754浮点、双精度和四精度是否保证-2、-1、-0、0、1、2的精确表示
- 浮点数在比 IEEE 754 更小的 c++ 范围内
- 为什么IEEE-754浮点数不能在平台之间交换
- IEEE-754浮点计算,相等和缩小
- 单个精度浮点数上的第 24 个分数位在哪里?IEEE 754
- 双IEEE 754替代品
- 如果可以用IEEE 754中的二进制格式表示,那么硬编码浮点精确吗
- 32位,64位和80位浮点IEEE-754的可表示值范围