【发布时间】:2020-11-10 21:11:02
【问题描述】:
我一直试图弄清楚有偏指数是如何工作的。 8 位为指数 itef 保留,所以它是 -127 到 127 或 0 到 255。当我想存储一个不适合 8 位的数字(指数部分)时,它会获得额外的位来存储该数据从? 如果您要说它使用偏差作为偏移量,请提供有关数据存储位置的附加信息。
【问题讨论】:
-
如果您试图将一个大于
FLT_MAX(2^128,大约为3.402823e+38)的数字存储在float变量中,则会发生溢出并且变量的值变为正无穷大。 -
为什么你认为指数不适合八位的数字可以存储在单精度浮点对象中?用于有限数的最大指数代码为 254。去除 127 偏差后,此代码表示 2^127 的指数。值为 2^128 及更大的有限数不能以单精度格式表示。因为没有存储数据,所以没有获得额外的位来存储数据。
-
@Eric Postpischil,我仍然很困惑。 32 位单精度。 1 位用于符号,8 位用于指数,其余用于尾数。如您所说,世博会的最大数量是254。当我存储数字30020.3f时怎么可能?在 msvc 中一切似乎都运行良好。 30k 如何适合 8 位? 30020 代表指数,0.3 代表分数。
-
@EricPostpischil “-14”?乘以 2^14。
-
首先,30020.3 被转换为它可以用格式表示的最接近的值,1.8322937488555908203125•2^14,等于 30020.30078125。 1.8322937488555908203125 是有效数字。在二进制中,它是 1.11010101000100010011100。小数点后的 23 位 11010101000100010011100 存储在编码的有效位字段中。指数 14 通过加 127 进行编码,产生 141,并存储在指数字段的 8 位中。
标签: visual-c++ types floating-point double precision