使用32位浮点数我认为有类似2 ^ 31 - 1可表示的浮点数。在java中,您可以使用现有的float并使用Math库找到“next float”。但是,假设你没有起始浮点数,有没有办法计算第n个浮点数?我不在乎什么语言,如果有一种具有库函数的语言我会接受它。
当然,我可以简单地将所有浮点数放入数组并将其编入索引,但这样做空间效率低。
这是一些进一步的澄清。我可以从Float.MIN开始并使用nextFloat增加N次,但这似乎效率低下,因为我需要多次执行此操作。
答案 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),最终将开始减少,但现在应该已经足够好了。