Java - 哪种数据类型用于物理计算?

Java - Which data type for physical calculations?

我正在尝试在 Java 中创建一个物理计算程序。因此我使用了一些公式,但它们总是返回错误的值。我将它们分开并发现:(到目前为止我使用 long。)

8 * 830584000 = -1945262592

这显然是错误的。公式中有分数和很高的数字,例如6.095E23和4.218E-10。

那么哪种数据类型最适合获得正确的结果?

除非您有充分的理由不这样做,否则 double 是物理计算的最佳类型。对于电影《星际穿越》中的虫洞建模来说已经足够好了,所以,我敢说,对你来说可能已经足够好了。请注意,作为粗略指南,它只给您 15 位十进制有效数字的精度。

但是你需要帮助 Java 编译器:

为要以 double 精度求值的表达式写 8.0 * 8305840008.0 是一个 double 文字并导致其他参数 提升 为相似类型。

目前您正在使用 整数 算法,并且正在观察 环绕 效果。

参考:https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

如果您需要大十进制数的完美精度,BigDecimal 是可行的方法,尽管它会以性能为代价。如果你知道你的数字不是那么大,你可以使用 long 而不是它应该更快,但范围更有限并且需要你转换十进制数。

由于物理计算涉及大量的浮点运算,浮点数据类型在此类计算中是一个不错的选择。我希望它会有所帮助。 :)