我正在创建一个小型重力模拟器,我需要它来“更新”每个粒子位置少量。
为此,我试图在等式中实现时间增加的增量
D = 1/2 A_g * T^2
是一个非常小的数字,如.001甚至更小。
在我尝试这样做时,我使用了'float',因为我的数组的其余部分都在那个数据类型中但是失败了所以我需要帮助。
在我对这个主题的研究中,我遇到了变量类型的'BigDecimal',但我对如何使用它感到困惑,我不想为每个粒子创建一个新变量(希望它可以用于只是我阵列中的另一个插槽)。
答案 0 :(得分:3)
正确的 1 答案最有可能使用float
。如果您正确使用它,float
能够表示小到1.1755e-38
(规范化)的数字。
我的猜测是你没有正确地写出float
字面值。文字0.001
实际上是double
。如果您需要float
字面值,则需要使用f
或F
后缀;即0.001f
。
(此猜测与错误消息一致....)
1 - 更改使用double
代替float
也是一个很好的答案。差异在于性能和空间使用不太可能是显着的,double
的额外精度可能是有益的。另一方面,n体相互作用的动力学是不稳定的。除非你深入研究在编写代码之前用数字方法解决DE的数学(数值分析),否则很可能会发现浮点精度不会限制建模的保真度......