Java 带时间乘法与除法的浮点精度

Java 带时间乘法与除法的浮点精度,java,android,precision,Java,Android,Precision,这些语句在不同的平台上执行时会有完全相同的结果吗 currentTime = System . nanoTime ( ) * 0.000000001f ; // 01 currentTime = System . nanoTime ( ) / 1000000000f ; // 02 问题是使用小浮点值会导致精度损失。只需将其保留为长浮点值即可。不损失精度和全面的完美确定性。您可能还会问,相同的浮点计算是否会在多个硬件和操作系统上得到相同的结果。谷歌“浮点决定论”。你是不是在尝

这些语句在不同的平台上执行时会有完全相同的结果吗

    currentTime = System . nanoTime ( ) * 0.000000001f ; // 01

    currentTime = System . nanoTime ( ) / 1000000000f ; // 02

问题是使用小浮点值会导致精度损失。

只需将其保留为长浮点值即可。不损失精度和全面的完美确定性。

您可能还会问,相同的浮点计算是否会在多个硬件和操作系统上得到相同的结果。谷歌“浮点决定论”。你是不是在尝试编写一些“原子”精度手表???@RC没有原子精度,只是以60 fps~0.017秒的速度递增时间。乘法器的精度可以根据需要确定,但不确定乘法过程中会发生什么。我会使用毫秒,因为nanoTime需要CPU电源,对于60秒,currentTimeMillis足够精确。如果使用毫秒,则应使用以下等式:
frame=(毫秒*102/100/17)它将精确到1毫秒。您建议如何通过此时间增量增加浮点值?完全跳过浮点!只需除以1e9即可计算分钟数。取1e9的模,加20,除以16666667,你就得到了第60秒,甚至更简单。只需保留长数并除以16666666(长数,忽略余数)。您将在大约57小时内失去半秒的精度。以前的方法永远不会失去精度。您将在所有设备和操作系统上获得相同的结果。