是否存在 IEEE 754 浮点值 x,其反转值 1/x 也是精确的浮点值,而不是 2^n?

Are there IEEE 754 floating point values x whose inverted values 1/x are also exact floating point values, other than 2^n?

2 的所有幂,例如1、2、4、8 等具有可以精确表示为 IEEE 754 浮点值的反数值(再次为 1、0.5、0.25、0.125 等)。

但是我想不出还有什么其他的值可以满足这个条件。
比如2.5的倒数是0.4,32位存储为0.4000000059604644775390625.

除了 2 的幂之外,是否还有其他值在 IEEE 754 中具有精确表示的倒数?

编辑
根据第一个答案,这不是我要找的,我想澄清一下:
> 1 的值和 < 1 的逆值都应具有精确的浮点表示。
2的逆幂的整数倍,
例如3 * 0.125 = 0.375,
确实有精确的浮点表示,但是 它们的 逆值,
例如1 / 0.375 = 1 / (3 * 1/8) = 8 / 3 = 2.666...,
不要,除非整数倍本身是 2 的幂。

以下显然*仅适用于二进制表示。

所有 2 的逆幂乘以整数(受特定表示中可用的尾数位限制 - binary32 为 23,binary64 为 52 等)在 IEEE754 中也有精确表示。

例如,这个:

for (let i = 0.9375; 
  i !== 0; /* never try this at home kids */ 
  i -= 0.0625) 
{
  console.log(i.toFixed(20));
}

...虽然看似危险,但实际上工作正常,因为所有这些数字都是精确表示。

但请务必记住,binaryXX 格式的指数代表 2 的幂,而不是 10(或任何其他与此相关的数字)的幂。因此,虽然 0.5 是精确的,但 0.05(及其大部分乘法)不是。

数字的倒数也是如此(对于 x,得到 1/x)。本质上可以归结为:

x = m * 2^e
1/x = 1/(m * 2^e) => (1/m) * (1/2^e) => (1/m) * 2^-e

IEEE-754 表示的反转指数部分只是反转其符号(如 1/2^x = 2^-x)。但是反尾数部分(以给定的格式)是不可能的。


总的来说,这仍然给我们留下了一个非常小的浮点子集。通俗地说,'to end with 5'是必要的,但还不够。

(经验教训:永远不要假设 OP 的意图是显而易见的,即使它对您来说很明显)

Are there IEEE 754 floating point values x whose inverted values 1/x are also exact floating point values, other than 2^n?

是的,-1 是一个简单的例子。

对于 正数 数字:不,不适用于基数 2 浮点编码1.

每个普通的有限浮点数是一个dyadic rational,一些integer_n/power_of_2。一个精确的倒数是 power_of_2/integer_n。要使该倒数能够准确表示,integer_n 也必须是 2 的幂。


1 IEEE 754 的最新版本也指定了 base-10 编码。