Tag: 双精度

为什么这个轴承计算如此疏散?

它甚至不准确吗? 我用Apfloat任意精度重新实现了整个事情,它没有任何区别,我应该知道开始!! public static double bearing(LatLng latLng1, LatLng latLng2) { double deltaLong = toRadians(latLng2.longitude – latLng1.longitude); double lat1 = toRadians(latLng1.latitude); double lat2 = toRadians(latLng2.latitude); double y = sin(deltaLong) * cos(lat2); double x = cos(lat1) * sin(lat2) – sin(lat1) * cos(lat2) * cos(deltaLong); double result = toDegrees(atan2(y, x)); return (result + 360.0) % 360.0; } @Test […]

new BigDecimal(double)vs new BigDecimal(String)

当BigDecimal与double和BigDecimal的输入一起使用时,输入为String似乎会出现不同的结果。 BigDecimal a = new BigDecimal(0.333333333); BigDecimal b = new BigDecimal(0.666666666); BigDecimal c = new BigDecimal(“0.333333333”); BigDecimal d = new BigDecimal(“0.666666666”); BigDecimal x = a.multiply(b); BigDecimal y = c.multiply(d); System.out.println(x); System.out.println(y); x输出为 0.222222221777777790569747304508155316795087227497352441864147715340493949298661391367204487323760986328125 而y是 0.222222221777777778 我错误地说这是因为双重不精确? 但由于这是一个BigDecimal ,不应该是一样的吗?

Java双打不擅长数学

我目前正在用java编写计算器程序。 这是我的第一个java程序,我习惯于c ++。 我注意到java中的双打完全不像c ++中的双打。 在java和c ++中尝试这个 4.1 * 3 那/ 0.1 它应该是 12.3然后123,c ++给出了这个结果,但java给出了 12.299999999999999和122.99999999999999 我怎么能像在c ++中使用双打一样进行数学运算,我知道你在程序中使用12.299999999999999的任何东西都不会与12.3相比没有区别,但是当用户正在阅读数字时,这非常难看。 我已经查看了BigDecimal类,但是我不能对该类执行trig和logarithms等等

java中双精度乘法的准确性?

对于java中的double值,乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但220是双数。 220.00000000000003是220后的下一个双倍。

Java BigDecimal精度问题

我知道以下行为是一个老问题,但我仍然不明白。 System.out.println(0.1 + 0.1 + 0.1); 或者即使我使用BigDecimal System.out.println(new BigDecimal(0.1).doubleValue() + new BigDecimal(0.1).doubleValue() + new BigDecimal(0.1).doubleValue()); 为什么这个结果是: 0.30000000000000004而不是: 0.3 ? 我怎么解决这个问题?

这个简单的“双重”计算有什么问题?

在java中这个简单的“双重”计算有什么问题? 我知道一些十进制数字不能正确地用float / double二进制格式表示,但是使用变量d3,java能够存储并显示2.64而没有任何问题。 double d1 = 4.64; double d2 = 2.0; double d3 = 2.64; double d4 = d1 – d2; System.out.println(“d1 : ” + d1); System.out.println(“d2 : ” + d2); System.out.println(“d3 : ” + d3); System.out.println(“d4 : ” + d4); System.out.println(“d1 – d2 : ” + (d1 – d2)); 回答, d1 : 4.64 […]