java - 0.999...相乘时可以四舍五入到1吗?

标签 java actionscript-3 math floating-point

当非常接近 1 的 float 与 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 中也不会出错,因为一位同事报告说他曾经看到它出错了,这在一定程度上促使我提出了这个问题.

最佳答案

因为 8 是 2 的幂,所以将 float 乘以它永远不会增加或删除该值的精度,除非发生溢出。乘以其他数字,特别是 float (2 的负幂除外,例如 0.25、0.0625 等),会降低精度。

关于java - 0.999...相乘时可以四舍五入到1吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357734/

相关文章:

java - 插入新文档时,Cosmos Db 触发器未运行

java - 为什么我不需要在 String 声明中转义像\037 这样的 ASCII 字符?

actionscript-3 - 从 Air Native 扩展返回一个结构

c# - 在 Unity3d 中导入数学时出错

java - 根据偏移量和 DST 偏移量确定时区

java - 如何根据使用 Java 解析 HashMap 的顺序对 HashMap 进行排序?

actionscript-3 - AS3 - Bitmap 类可以调度鼠标事件吗?

actionscript-3 - AS3 字符串内存泄漏

javascript - 如何在 Javascript 中舍入一个数字?

python - 从 Excel 中读取和比较坐标