我知道0.1十进制数不能用有限的二进制数精确地表示(解释),因此double n = 0.1将失去一些精度,并且将不精确0.1。另一方面,0.5因为它确实可以表示0.5 = 1/2 = 0.1b。 话虽如此,将0.1 三遍相加并不完全是可以理解的,0.3因此,以下代码将输出false: double sum = 0, d = 0.1; for (int i = 0; i < 3; i++) sum += d; System.out.println(sum == 0.3); // Prints false, OK 但是,0.1 五次相加会得到确切的结果0.5呢?以下代码显示true: double sum = 0, d = 0.1; for (int i = 0; …
public class doublePrecision { public static void main(String[] args) { double total = 0; total += 5.6; total += 5.8; System.out.println(total); } } 上面的代码打印: 11.399999999999 我如何才能仅打印(或将其用作)11.4?
编辑:所以基本上我想写的是1位哈希double。 我想将映射double到true或false有50/50的机会。为此,我编写了选择一些随机数的代码(仅作为示例,我想在具有规则性的数据上使用它并仍然获得50/50的结果),检查它们的最后一位,并递增y其是否为1,或者n是否为1。0。 但是,此代码始终导致25%y和75%的结果n。为什么不是50/50?为什么会有这样奇怪但直接的(1/3)分布呢? public class DoubleToBoolean { @Test public void test() { int y = 0; int n = 0; Random r = new Random(); for (int i = 0; i < 1000000; i++) { double randomValue = r.nextDouble(); long lastBit = Double.doubleToLongBits(randomValue) & 1; if (lastBit == 1) { …
在下面的示例中是否可以除以0(或无穷大)? public double calculation(double a, double b) { if (a == b) { return 0; } else { return 2 / (a - b); } } 在正常情况下,当然不会。但是如果a和b非常接近,会由于计算精度而(a-b)导致结果0吗? 请注意,这个问题是针对Java的,但是我认为它将适用于大多数编程语言。