Vb.net和C++的MATH函数中任何已知的歧义

dex*_*lab 4 c++ vb.net math

最近我发现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类?

Ant*_*vin 5

Math.IEEERemainder上文档说明如下:

IEEERemainder方法与模数运算符不同.尽管两者都在分割后返回余数,但它们使用的公式是不同的.IEEERemainder方法的公式是:

IEEERemainder = dividend - (除数*Math.Round(dividend/divisor))

相比之下,模数运算符的公式为:

模量=(Math.Abs​​(被除数) - (Math.Abs​​(除数)*(Math.Floor(Math.Abs​​(被除数)/ Math.Abs​​(除数)))))*Math.Sign(股息)

所以,它只是一个不同的功能.