对于 IEEE 754 双精度数,长度为 1 的哪个范围包含最多的双精度数?
For IEEE 754 double precision numbers, what range with length of 1 contains the most doubles?
范围的长度等于 Range.Max - Range.Min
例如,“[0-1]”和“[3.5-4.5]”是长度 1 范围的示例。
那么哪个长度为 1 的范围(如果有的话)具有最多的双精度数字?
我的猜测是 [-0.5 - 0.5] 或 [0-1],但无法以任何方式证明这一点。
IEEE浮点数x的分布大致与1 / abs(x)成正比,所以length-1范围内可表示数最多的是[-0.5, 0.5]范围
我同意 Timothy Shields 发表的 。这是对更具体理由的尝试。
设 "block" 个数字是具有相同指数和符号的一组数字。每个块包含 2^52 个数字。如果您不想同时计算正零和负零,它们不会重叠,但有争议的零除外。
范围 [0, 0.5) 包含指数为 0 到 1021, 1022 块的所有数字。 (-0.5, 0.5) 包含 2044 个块。 [-0.5, 0.5] 包含所有这些数字加上两个端点。
更改为 [0, 1] 会删除指数为 0 到 1021 的负数的 1022 个块,并为 [0.5, 1) 添加一个块。指数为 1022 的数字。
[1,2)是一个单块,也就是最后一个完整的块,只覆盖长度1。任何在(-2, 2)之外的长度为1的范围只能包含部分块。
在 2044*(2^52)+2 时,[-0.5, 0.5] 是明显的赢家。
范围的长度等于 Range.Max - Range.Min
例如,“[0-1]”和“[3.5-4.5]”是长度 1 范围的示例。
那么哪个长度为 1 的范围(如果有的话)具有最多的双精度数字?
我的猜测是 [-0.5 - 0.5] 或 [0-1],但无法以任何方式证明这一点。
IEEE浮点数x的分布大致与1 / abs(x)成正比,所以length-1范围内可表示数最多的是[-0.5, 0.5]范围
我同意 Timothy Shields 发表的
设 "block" 个数字是具有相同指数和符号的一组数字。每个块包含 2^52 个数字。如果您不想同时计算正零和负零,它们不会重叠,但有争议的零除外。
范围 [0, 0.5) 包含指数为 0 到 1021, 1022 块的所有数字。 (-0.5, 0.5) 包含 2044 个块。 [-0.5, 0.5] 包含所有这些数字加上两个端点。
更改为 [0, 1] 会删除指数为 0 到 1021 的负数的 1022 个块,并为 [0.5, 1) 添加一个块。指数为 1022 的数字。
[1,2)是一个单块,也就是最后一个完整的块,只覆盖长度1。任何在(-2, 2)之外的长度为1的范围只能包含部分块。
在 2044*(2^52)+2 时,[-0.5, 0.5] 是明显的赢家。