最近我发现C++ fmod函数的结果和它在Vb.net中的等效Math.IEEERemainder存在歧义.
如果我们计算FMOD(4.1887902053333335/6.283185307,1.0)在C++中,我们得到的,而0.6666666677277 Math.IEEERemainder(4.1887902053333335/6.283185307,1.0)在Vb.net结果-0.33333333322723因此,我们发现结果完全差,严重影响产量.
我目前正在开发一个项目,它有几个数学运算,包括正弦,双曲余弦,模数等,最初是用C++编写的,我的任务是在Vb.net中转换它.
虽然大多数代码可以简单地在网络上进出在线转换器,但这些数学模糊性仍然隐藏着损害结果.
有没有人知道这些已知的差异,尤其是Vb.net中关于C++的Math类?
Math.IEEERemainder上的文档说明如下:
IEEERemainder方法与模数运算符不同.尽管两者都在分割后返回余数,但它们使用的公式是不同的.IEEERemainder方法的公式是:
IEEERemainder = dividend - (除数*Math.Round(dividend/divisor))
相比之下,模数运算符的公式为:
模量=(Math.Abs(被除数) - (Math.Abs(除数)*(Math.Floor(Math.Abs(被除数)/ Math.Abs(除数)))))*Math.Sign(股息)
所以,它只是一个不同的功能.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |