7

对于 32 位浮点数,我认为有 2^31 - 1 个可表示的浮点数。在java中,您可以使用现有的浮点数并使用数学库找到“下一个浮点数”。但是假设您没有起始浮点数,有没有办法计算第 n 个浮点数?我不在乎是什么语言,如果有一种带有库函数的语言,我会接受它。

当然,我可以简单地将所有浮点数放入一个数组中并对其进行索引,但这样空间效率很低。

这里有一些进一步的说明。我可以从 Float.MIN 开始并使用 nextFloat 递增 N 次,但这似乎效率低下,因为我需要多次执行此操作。

4

1 回答 1

7

取决于您希望它们如何订购。请记住,并非所有的花车都是订购的。例如,一对不同的 NaN 是无序的(即它们不相等,但没有一个大于另一个)。

如果您不介意以这些结尾,则可以将整数重新解释为浮点数。您执行此操作的方式因语言而异;这是一个C实现:

float int_to_float(uint32_t in) {
    union {
        float f;
        uint32_t i;
    } u;

    u.i = in;
    return u.f;
}

这具有为您提供大多数有序结果的便利属性——传入 0 得到 0.0,传入 1 得到 1.4e-45,2 得到 2.8e-45,依此类推。一旦你进入 NaN/Inf 值,结果就会开始变得疯狂,一旦你达到 0x80000000 (-0.0),结果最终会开始下降,但现在应该已经足够好了。

于 2012-06-14T19:19:45.247 回答