0

好的,所以我们有经典的 1 * 1/3 * 3 = 0.9999999。我明白为什么会这样。

在我的用例中,我试图产生一个整数。我很乐意接受我的价值,除非无限精度数学要求我们应该以整数开头(参见:上述用例)。

有没有一种常用的方法来实现这一点?

例子:

双倍 myFloat = 1.0/2.0;

1 * myFloat * 2 = 2 结果:2

我的浮动 = 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

我想到的一种方法是在铺平之前总是对我的结果进行一些增量。不过,我想以一种干净、普遍接受的方式来实现我的结果。

编辑:为清晰起见,根据反馈进行了更改。

4

1 回答 1

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)) < 非零 f(x) 的 epsilon。

于 2013-02-28T03:02:25.673 回答