【发布时间】:2011-12-05 03:25:12
【问题描述】:
当一个非常接近 1 的浮点数乘以 int > 0 时,它是否可以被解释为 1。
也就是说,如果Math.random() 返回其可能的最高结果(比 1.0 低 1 步),将
(int)(Math.random() * 8)
是 8 还是 7?
举个实际的例子,这个经常使用的构造能否给出索引越界错误:
someArray[(int)(Math.random() * someArray.length)];
我对 Java 和 ActionScript 3 的答案特别感兴趣,但我想它们都使用相同的浮点运算规则,并且任何平台的答案都会很有用。
更新:虽然我已经接受了一个答案,但我仍然希望确认这在 ActionScript 3 中也不会出错,因为一位同事报告说他曾经看到它出错了部分促使我提出这个问题。
【问题讨论】:
-
如果这样的数字 never 溢出到下一个整数中,我会感到非常惊讶......但我会等待更好的答案......
-
@UdoFholl 我不打算使用任何官方的数学符号,只是想用很多个九来表示一个数字。
-
当乘以一个非常接近 1 的浮点数时,它是否可以被解释为 1 -- 是的,如果你将它乘以 0 ;-) JK跨度>
-
@JoshLee:从数学上讲,0.99999999999999999999999... 与 1.0 相同,但计算机不能用浮点数或双精度数表示 0.9999999...让随机数生成器生成它。
-
@Josh:不过,这无关紧要,因为 RNG(作为计算机程序)不会生成计算机无法准确表示的数字。
标签: java actionscript-3 math floating-point