Floating point 整数乘以浮点数,然后除以相同的浮点数-这是一种将值强制恢复为原始整数的干净方法

Floating point 整数乘以浮点数,然后除以相同的浮点数-这是一种将值强制恢复为原始整数的干净方法,floating-point,floating-accuracy,floating-point-precision,Floating Point,Floating Accuracy,Floating Point Precision,好的,我们有经典的1*1/3*3=0.999999。我明白为什么会这样 在我的用例中,我试图得到一个整数。我很乐意接受我的底线值,除非无限精度数学要求我们应该首先得到一个整数(参见:上面的用例) 有没有一种常用的方法来实现这一点 示例: 双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*m

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

在我的用例中,我试图得到一个整数。我很乐意接受我的底线值,除非无限精度数学要求我们应该首先得到一个整数(参见:上面的用例)

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

示例:

双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

我想到的一个方法是,在铺设地板之前,总是在我的结果上钉上一些三角形。不过,我想以一种干净、被普遍接受的方式取得我的成绩

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

将f(x)四舍五入为最接近的整数,四舍五入(f(x))

比较f(x)和round(f(x))。如果它们足够接近,以至于差异是由于四舍五入造成的,则使用四舍五入(f(x))作为结果。如果没有,请使用地板(x)


如果输入值都具有相似的大小,则对于某些固定数ε,使用abs(f(x)-round(f(x))为什么选择下限,而不是四舍五入到最接近的整数?舍入错误很可能产生比精确结果小的结果,也可能产生比精确结果大的结果。在这里,最接近的整数对我来说是危险的。如果值为2.5,我肯定不希望结果为3。但是,如果结果为2.9999999999,我确实希望结果为3。在这种情况下,请执行以下操作:四舍五入到最近值,然后将结果与未四舍五入的值进行比较。如果足够接近,则保持四舍五入。如果不知道精确的数学结果是整数,则将近似浮点结果转换为理想结果的正确方法是将其四舍五入到最接近的整数,前提是累积的roun如果你的结果是2.5,因为错误太大,以至于产生了2.5,尽管正确的结果是整数,那么你的错误太大,无法修正。如果你的结果是2.5,因为某些精确的结果不是整数,那么你必须解释什么是2.5t结果可能是。如果是这样,那么您应该指定y中的误差大小以及f(x)的接近程度可以是整数。如果前者超过后者,则问题通常不可能解决;浮点运算已丢失计算答案所需的信息。如果不是,则可以在两个值之间选择一些e并计算下限(y+e)。