计算第N个浮点数

时间:2012-06-14 19:08:46

标签: java c++ c

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

当然,我可以简单地将所有浮点数放入数组并将其编入索引,但这样做空间效率低。

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

1 个答案:

答案 0 :(得分: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,一个得到你1.4e-45,2得到你2.8e-45,依此类推。一旦你进入NaN / Inf值,结果将开始变得疯狂,并且一旦你达到0x80000000(-0.0),最终将开始减少,但现在应该已经足够好了。