如何确定最小的正可表示浮点值?

时间:2018-11-05 15:39:27

标签: c# floating-point

只是好奇事情是如何运作的。 浮点最大值和epsilon值为

Single MaxValue = 3.40282347E+38F; // derived from 1.000.. * 2^128
Single Epsilon = 1.401298E-45F; // probably from substracting (1.00..01 - 1.00..0) * 2^-128 ?

但是最小的正值应该在1 / MaxValue或1 * 2 ^ -127左右,这将使^ -39或^ -38成为十进制数的幂。那么,浮点数如何存储低于-38(至-45)功率的东西?

1 个答案:

答案 0 :(得分:2)

对于非常小的数字,IEEE 754浮点使用允许较小间隔的归一化值。

  

在计算机科学中,非正规数或非正规数(现在通常称为次正规数)填补了浮点算术中大约为零的下溢间隙。大小小于最小正态数的任何非零数都是“亚正态”。

     

在正常的浮点值中,有效位数不包含前导零;而是将前导零移动到指数。因此0.0123将写为1.23×10-2。非正规数是指此表示将导致其指数低于最小指数(该指数通常具有有限范围)的数字。此类数字使用有效数字中的前导零表示。

有关更多信息,请参见Wikipedia page on denormal numbersthe page on IEEE 754-1985,其中还列出了您遇到的数字(10 ^ -45)。

  

最接近零的正数和负数(由指数字段中均为0且分数字段中为二进制值1的非正规化值表示)   ±2 ^ -149≈±1.40130×10 ^ -45