好吧,我们有经典的1 * 1/3 * 3 = 0.9999999。我明白为什么会这样。
在我的用例中,我试图得到一个整数。我很乐意接受我的价值,除非无限精确数学表明我们应该得到一个整数开始(参见:上面的用例)。
有没有常用的方法来实现这一目标?
示例:
double myFloat = 1.0 / 2.0;
1 * myFloat * 2 = 2结果:2
myFloat = 1.0 / 2.0;
2.5 * myFloat * 2 = 2.5结果:2
myFloat = 1.0 / 3.0;
1 * myFloat * 3 = .9999结果:1
myFloat = 1.0 / 3.0;
.9 * myFloat * 3 = .9结果:0
我想到的一种方法是在铺设它之前总是在我的结果上添加一些delta。我希望以一种干净,普遍接受的方式实现我的结果。
编辑:根据反馈意见进行了更改。
答案 0 :(得分:0)
将f(x)舍入到最接近的整数,round(f(x))
比较f(x)和round(f(x))。如果它们足够接近以使得差异归因于舍入,则使用round(f(x))作为结果。如果没有,请使用floor(x)。
如果输入都具有相似的幅度,则对于某些固定数量的epsilon使用abs(f(x)-round(f(x))< epsilon可能就足够了。如果不是,则使用abs((f( x)-round(f(x))/ f(x))< epsilon for non-zero f(x)。