因此,在 24 位浮点的上下文中,我有以下问题:
如果我想通过对指数使用更多或更少的位来修改浮点数。例如,我可能希望使用 9 位作为指数,使用 15 位作为尾数。如果我想使用表示 1728 10和 191744 10的单一格式,多少指数位最合适?
对于 1728 10,二进制代表。是 11011000000 所以我的指数是 138 (10+128) 所以我想用 8 位来表示指数 138 (10001010)?
因此,在 24 位浮点的上下文中,我有以下问题:
如果我想通过对指数使用更多或更少的位来修改浮点数。例如,我可能希望使用 9 位作为指数,使用 15 位作为尾数。如果我想使用表示 1728 10和 191744 10的单一格式,多少指数位最合适?
对于 1728 10,二进制代表。是 11011000000 所以我的指数是 138 (10+128) 所以我想用 8 位来表示指数 138 (10001010)?
构造非标准浮点格式时,分配给指数或有效数字1的位数取决于您自己的需要。做对你有用的事。也可以选择指数偏差来为您服务。除了数学和逻辑的要求之外,你在编造它时没有任何规则。
您显示的两个数字 1728 和 191744 在有效数字中需要十个显式位(存储九个),因为 191744 以位 1011101011 2开头。指数(给定一个归一化为 [1, 2) 的有效数字)将是 10 和 17,因此您需要能够在指数字段中编码八个值。但是,如果要为无穷大/NaN 保留一个指数编码,则需要九个值。所以你的指数需要四位。(例如,您可以使用偏差为 10 的四位,这将是不寻常的但并非不可能,因此 0000 2代表指数 10 和 0111 2表示指数 17。这将使 1728 成为次正规数。)因此,表示 1728 和 191744 需要一个符号位、四个指数位和九个有效位。剩下 10 位供您以任何您希望的方式分配。
自定义浮点格式通常仅用于存储,并且仅在内存使用至关重要时。在任何支持浮点的硬件上,本机浮点格式将比自定义格式的软件实现快得多。因此,通常最好在从存储读取时从自定义格式转换为硬件支持的格式,以硬件格式执行所有计算(包括临时将中间值存储到内存中),然后再转换回之前的自定义格式到长期储存。
1有效数是首选术语,而不是尾数。尾数是对数的(对数的小数部分),而有效数是线性的(浮点数的小数部分)。
您正在应用循环逻辑。指数 10 存储为 10+128,因为 128 = 2^7,是 8 位指数字段范围的一半。如果您使用 5 位指数字段,您可以存储指数 -16 到 +16,而指数 10 将存储为 11010 (26)。