float256中指数和分数的大小

Muh*_*mad 4 floating-point

你最好看看桌子,了解我想要的东西:

?????????????????????????????????????????????
?  name  ?  sign  ?  exponent  ?  fraction  ?
?????????????????????????????????????????????
?float16 ?    1   ?      5     ?     10     ?
?????????????????????????????????????????????
?float32 ?    1   ?      8     ?     23     ?
?????????????????????????????????????????????
?float64 ?    1   ?     11     ?     52     ?
?????????????????????????????????????????????
?float128?    1   ?     15     ?    112     ?
?????????????????????????????????????????????
?float256?    1   ?    ????    ?    ????    ?
?????????????????????????????????????????????
?float512?    1   ?    ????    ?    ????    ?
?????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

我的问题是如何计算指数和分数的位数给定总位数,如256,512或1024.

Ste*_*non 7

IEEE-754(2008)的早期草案定义了任意宽度浮点数"应该"的指数和有效数字段的宽度的指导原则.这不是一项艰难的要求,而只是推荐的做法.它被认为对于提供的最小利益来说过于繁琐,因此它完全从标准中删除,并替换为:

语言标准应定义支持每个支持的基数的可扩展精度的机制.支持可扩展精度的语言标准应允许用户指定p和emax.语言标准还应允许通过单独指定p来指定可扩展的精度; 在这种情况下,当p是≥二进制格式的237位或者p是≥十进制格式的51位时,emax应由语言标准定义为至少1000×p.

(3.7扩展和可扩展精度,第14页).

也就是说,标准仍然定义(不要求)第3.6节(p13)表格中每个32位大小的"交换格式"大于128.具体地说,宽度的二进制格式k具有round(4*log2(k)) - 13位指数.对于具体情况k=256,这给出:

exponent: round(4*log2(256)) - 13 = 32 - 13 = 19
significand: 256 - 1 - 19 = 236
Run Code Online (Sandbox Code Playgroud)

对于遵循此公式的384位宽格式,指数宽度将为:

round(4*log2(384)) - 13 = round(34.339850002884624) - 13 = 21 bits
Run Code Online (Sandbox Code Playgroud)

请注意,有许多程序包用于任意精度浮点运算,不符合本指南.这只是"binary256交换格式"的定义,而不是任何给定实现必然使用的定义.