【发布时间】:2017-07-08 21:49:35
【问题描述】:
用二分查找很容易找到一个整数even if it can be arbitrarily large:先猜数量级,然后不断除以区间。 This answer 描述了如何找到任意有理数。
设置好场景后,我的问题类似:我们如何猜测 IEEE 754 浮点数?假设它不是 NaN,但其他一切都是公平的游戏。对于每个猜测,您的程序将被告知所讨论的数字是更高、相等还是更低。尽量减少最坏情况下所需的猜测次数。
(这不是家庭作业。不过,我可能会做一个,如果结果证明这是一个有趣的答案,而不仅仅是“通过大量特殊情况处理将浮点数值困难打死。” )
编辑:如果我在搜索方面做得更好,我可以找到answer---但这只有在您已经知道重新解释为int 有效(有某些警告)时才有效。所以留下这个。感谢 Harold 的精彩回答!
【问题讨论】:
-
我们是否可以将浮点数的位模式重新解释为整数?
-
当然,随便你。但是当解释为浮点数时,oracle 会给你比较结果。
-
为什么要“先猜数量级”?这和二分查找有什么关系?
-
@HenkHolterman 看到我添加的新链接,我希望问题更清楚?摘要:要使用经典的二进制搜索,您首先需要有限边界。数学意义上的整数没有先验的有限界限,它可以任意大或小。因此,您需要先猜出它们,然后才能开始划分区间。
-
@Matthias:不需要。这不是太重要。我只是说我不会称它为搜索,虽然原理是一样的:反复切半。
标签: algorithm floating-point binary-search numerics