当将非常接近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中也不会出错,因为一位同事报告说他一次看到它出错了,这在一定程度上促使了我提出这个问题。
如果将1.0以下的最大值乘以someInt
(> 0),结果将永远不会是someInt
。
可以对整数进行彻底测试,如下所示:
Double greatestLessThanOne = Double.longBitsToDouble(4607182418800017407L);
// Assert that greatestLessThanOne is indeed the largest double less than 1.
//assert 1.0 == greatestLessThanOne + Math.ulp(greatestLessThanOne);
for (int i = 1; i >= 0; i++)
if ((int) (greatestLessThanOne * i) == i)
System.out.println("Exception found: " + i);
该代码段不产生任何输出。
(Math.ulp
返回给定double和double值之间的距离,此距离随后在幅度上更大。因此,该断言确保greatestLessThanOne
确实是小于1.0的最大值。)
换句话说,你的线
Object element = elementArray[(int)(Math.random() * elementArray.length)];
永远不会引发ArrayIndexOutOfBoundsException。
此外,根据Mark Dickinsons在此处的评论,当乘以double时也是如此。
通过采用舍入至最接近模式的IEEE 754浮点运算,可以显示
x * y <
yx < 1.0
以及任何非微小正数y
。(如果y
它是次普通数或最小的正普通数,则可能会失败。)
检查了一些解决方案,但我没有得到预期的结果,这是我的代码; 谢了!
问题内容: 给出50的结果。这是为什么?它是如何计算的? (对不起,我被这个问题的较早版本误认为值是46) 问题答案: SQL ROUND()函数将数字四舍五入到精度… 例如: round(45.65,1)给出结果= 45.7 round(45.65,-1)给出结果= 50 因为这种情况下的精度是从小数点开始计算的。如果为正数,则将考虑右侧数字,如果> = 5,则将其向上舍入;如果<= 4,则四舍
我有一个Java BigDecimal表达式,如下所示: 哪里 BigDecimal totalCase = BigDecimal。零;BigDecimal totalPrep = BigDecimal。零; 我必须将totalPrep除以totalCase,结果乘以100,得到以%表示的结果值。66.6666666666666666666666666666666666667 假设总准备是二进制2
swift中取整1.005的问题 1.005四舍五入到小数点后两位,结果是1.0,而不是1.01,如何求解? 输出:
问题内容: 如何将值转换为执行以下操作: 也就是说,答案总是四舍五入。 问题答案: 如果你明确地 投 来,小数部分将被截去。例如: 此外,如果需要返回值,也可以使用方法舍入值。
问题内容: 有没有办法将python浮点数舍入为x小数?例如: 我已经找到了修剪/截断它们的方法(66.666666666-> 66.6666),但是不是圆形的(66.666666666-> 66.6667)。 问题答案: 使用内置功能: 帮助: round(number [,ndigits])->浮点数 将数字四舍五入到给定的精度(以十进制数字表示)(默认为0位数)。这总是返回一个浮点数。精度可