Floating point float256中指数和分数的大小

Floating point float256中指数和分数的大小,floating-point,Floating Point,你最好看看表,了解我想要什么: ╔════════╦════════╦════════════╦════════════╗ ║ name ║ sign ║ exponent ║ fraction ║ ╠════════╬════════╬════════════╬════════════╣ ║float16 ║ 1 ║ 5 ║ 10 ║ ╠════════╬════════╬════════════╬════════════╣ ║flo

你最好看看表,了解我想要什么:

╔════════╦════════╦════════════╦════════════╗
║  name  ║  sign  ║  exponent  ║  fraction  ║
╠════════╬════════╬════════════╬════════════╣
║float16 ║    1   ║      5     ║     10     ║
╠════════╬════════╬════════════╬════════════╣
║float32 ║    1   ║      8     ║     23     ║
╠════════╬════════╬════════════╬════════════╣
║float64 ║    1   ║     11     ║     52     ║
╠════════╬════════╬════════════╬════════════╣
║float128║    1   ║     15     ║    112     ║
╠════════╬════════╬════════════╬════════════╣
║float256║    1   ║    ????    ║    ????    ║
╠════════╬════════╬════════════╬════════════╣
║float512║    1   ║    ????    ║    ????    ║
╚════════╩════════╩════════════╩════════════╝

我的问题是,如果给定总位数(如256、512或1024),如何计算指数和分数的位数。

中没有256位的双精度


格式中的位数不是计算出来的,而是任意选择的,以给出特定的精度和范围。如果您想创建自己的256位浮点数格式,只需选择能够提供所需精度和范围的大小。

表中的值来自标准值,最多只能达到128位。如果您的硬件或软件实现了具有更多位的浮点运算,则需要查阅其文档。

IEEE-754(2008)的早期草案定义了任意宽度浮点的指数和有效位字段的宽度“应”是多少。这不是一项硬性要求,只是建议的做法。它被认为对于提供的最低利益而言过于繁琐,因此从标准中完全删除,并替换为:

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

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

这就是说,该标准仍然在第3.6条(第13页)的表格中定义(不要求)每一个大于128位的32位倍数的“交换格式”。具体而言,宽度
k
的二进制格式具有
四舍五入(4*log2(k))-13位指数。对于
k=256
的特定情况,给出:

exponent: round(4*log2(256)) - 13 = 32 - 13 = 19
significand: 256 - 1 - 19 = 236
对于遵循此公式的384位宽格式,指数宽度应为:

round(4*log2(384)) - 13 = round(34.339850002884624) - 13 = 21 bits

请注意,有很多用于任意精度浮点运算的软件包不符合此准则。这只是“binary256交换格式”的定义,而不是任何给定的实现必须使用的格式。

对于较小的类型有类似的建议吗?这个16位浮点的公式给出了3位指数。可能很好。但是12位浮点或类似的呢?如果12位浮点使用3位指数,它会如何影响它可以表示的值?@AndyT:我的答案中的公式只适用于大格式(k>=64)。如果您尝试将其应用于较小的格式,您将无法获得足够的指数范围来弥补丢失的精度,并且您通常最好使用定点。IEEE-754标准为特定的小格式指定了更宽的指数(
binary32
具有8位指数,
binary16
具有5位指数)。