从 Java 中的多头除法中获取分数
Get fraction from division of longs in Java
我想得到两个 long 值的商的分数(模 1)。
long dividend = 50L;
long divisor = 3L;
float n1 = (dividend % divisor) / (float) divisor;
float n2 = (dividend / (float) divisor) % 1;
System.out.println(n1);
System.out.println(n2);
上面打印了下面的内容。
0.6666667
0.66666603
我不太了解浮点精度的工作原理。
为什么第二个(可能更清晰)实现不如第一个准确?
float
的精度为 6 到 9 位小数。
在第一次计算中,浮点除法最后发生,所以完整的浮点精度在那里。
第二次计算时出现了浮点除法,然后整数部分被lob掉了,暴露了后面数字的不准确。
整数部分是精度的一部分,现在那些数字丢失了。
为了看得更清楚,请尝试将 dividend
设置为更大的数字,但准确度会更低。
感谢@Andreas 在评论中的回答。
我想得到两个 long 值的商的分数(模 1)。
long dividend = 50L;
long divisor = 3L;
float n1 = (dividend % divisor) / (float) divisor;
float n2 = (dividend / (float) divisor) % 1;
System.out.println(n1);
System.out.println(n2);
上面打印了下面的内容。
0.6666667
0.66666603
我不太了解浮点精度的工作原理。
为什么第二个(可能更清晰)实现不如第一个准确?
float
的精度为 6 到 9 位小数。
在第一次计算中,浮点除法最后发生,所以完整的浮点精度在那里。
第二次计算时出现了浮点除法,然后整数部分被lob掉了,暴露了后面数字的不准确。
整数部分是精度的一部分,现在那些数字丢失了。
为了看得更清楚,请尝试将 dividend
设置为更大的数字,但准确度会更低。
感谢@Andreas 在评论中的回答。