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