我正在一个项目中工作,我必须在托管代码和非托管代码之间进行接口。我目前在math.h上遇到一个奇怪的问题。
某些函数浮动数将返回0(例如:2.1219957934356005e-314)并随机...
以示例:
int error = 0;
int success = 0;
for (int i = 0; i < 1000; ++i)
{
double test = std::sqrt(9.01);
if (test < 2 || test > 4)
{
++error;
}
else
{
++success;
}
}
通常我会通过断点获得错误= 1000,我会重试一次并再次获得1000次错误并且一些我将获得1000次成功......
我认为反汇编和寄存器没什么问题(坏结果除外)。
对于上下文:此代码被编译为64位的dll,并由C#使用。这个应用确实是多线程的。
有什么想法吗?
答案 0 :(得分:1)
我想我解决了问题的一部分(我必须做更多的测试)。
主要问题是由于我的项目更改为clr(托管代码)以及所有内容。通过更多研究,我发现我可以编译项目的特定文件,属性clr设置为no。现在我所有旧的本机源代码都编译为本机。但它仍然无法解释为什么像sqrt(),ceil()等函数在托管上下文中每次都不起作用。
现在我必须解决OpenGL的错误,但那是另一个故事:D(这个项目是令人厌恶的!)