Java - 哪种数据类型用于物理计算?
Java - Which data type for physical calculations?
我正在尝试在 Java 中创建一个物理计算程序。因此我使用了一些公式,但它们总是返回错误的值。我将它们分开并发现:(到目前为止我使用 long
。)
8 * 830584000 = -1945262592
这显然是错误的。公式中有分数和很高的数字,例如6.095E23和4.218E-10。
那么哪种数据类型最适合获得正确的结果?
除非您有充分的理由不这样做,否则 double
是物理计算的最佳类型。对于电影《星际穿越》中的虫洞建模来说已经足够好了,所以,我敢说,对你来说可能已经足够好了。请注意,作为粗略指南,它只给您 15 位十进制有效数字的精度。
但是你需要帮助 Java 编译器:
为要以 double
精度求值的表达式写 8.0 * 830584000
。 8.0
是一个 double
文字并导致其他参数 提升 为相似类型。
目前您正在使用 整数 算法,并且正在观察 环绕 效果。
参考:https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
如果您需要大十进制数的完美精度,BigDecimal 是可行的方法,尽管它会以性能为代价。如果你知道你的数字不是那么大,你可以使用 long 而不是它应该更快,但范围更有限并且需要你转换十进制数。
由于物理计算涉及大量的浮点运算,浮点数据类型在此类计算中是一个不错的选择。我希望它会有所帮助。 :)
我正在尝试在 Java 中创建一个物理计算程序。因此我使用了一些公式,但它们总是返回错误的值。我将它们分开并发现:(到目前为止我使用 long
。)
8 * 830584000 = -1945262592
这显然是错误的。公式中有分数和很高的数字,例如6.095E23和4.218E-10。
那么哪种数据类型最适合获得正确的结果?
除非您有充分的理由不这样做,否则 double
是物理计算的最佳类型。对于电影《星际穿越》中的虫洞建模来说已经足够好了,所以,我敢说,对你来说可能已经足够好了。请注意,作为粗略指南,它只给您 15 位十进制有效数字的精度。
但是你需要帮助 Java 编译器:
为要以 double
精度求值的表达式写 8.0 * 830584000
。 8.0
是一个 double
文字并导致其他参数 提升 为相似类型。
目前您正在使用 整数 算法,并且正在观察 环绕 效果。
参考:https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
如果您需要大十进制数的完美精度,BigDecimal 是可行的方法,尽管它会以性能为代价。如果你知道你的数字不是那么大,你可以使用 long 而不是它应该更快,但范围更有限并且需要你转换十进制数。
由于物理计算涉及大量的浮点运算,浮点数据类型在此类计算中是一个不错的选择。我希望它会有所帮助。 :)