fmod产生的误差应该如何解决?
fmod产生的误差应该如何解决?
- 关于fmod函数的用法
- 关于fmod函数的漏洞
- bug是什么样的?
- bug分析
- 解决方案
- 方法1
- ~~方法2~~(方法二无法解决fmod产生的误差)
关于fmod函数的用法
可以查看如下教程:
https://www.runoob.com/cprogramming/c-function-fmod.html
就是两个flaot数进行取余,如下是我查看vs内置的函数声明:
但是我在菜鸟教程中,查看是double:
那说明float和double应该都是可以的!
关于fmod函数的漏洞
bug是什么样的?
再一次正常的开发过程中,我发现fmod(a, b)=fmod(40.0, 10.0) 返回 10.0,
当然,并不是直接给a赋值为40.0,a的值是从0一直加0.1,直到加到40.0为止.
bug分析
-
在这个bug中 , fmod(40.0, 10.0) 返回 10.0 的结果是出乎意料的,我们期望的结果是 0.0(也就是40%10应该是0)。
这是因为浮点数运算中的精度问题可能导致 fmod 的行为不符合预期,尤其是在处理周期性计算时。 -
以下是对问题的分析和解决方案:
f m o d ( x , y ) fmod(x, y) fmod(x,y) 返回 x − n ∗ y x - n * y x−n∗y,其中 n 是 x / y n 是 x / y n