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