c++ - 来自 math.h 的函数使用 C++/clr 返回无效结果

标签 c++ clr math.h

我在一个项目中工作,我必须在其中连接托管代码和非托管代码。我目前在使用 math.h 时遇到了一个奇怪的问题。

一些函数将 float 返回 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;
    }
}

通常我会得到带有断点的 error = 1000,我会重试几次并再次得到 1000 个错误,有时我会得到 1000 个成功...

我没有发现反汇编和寄存器有任何问题(除了坏结果)。

对于上下文:此代码被编译为 64 位的 dll 并由 C# 使用。这个应用确实是多线程的。

有什么想法吗?

最佳答案

我想我解决了一部分问题(我必须做更多的测试)。

主要问题是因为我的项目对所有内容都更改为 clr(托管代码)。通过更多研究,我发现我可以在将属性 clr 设置为 no 的情况下编译项目的特定文件。现在我所有的旧 native 源代码都被编译为 native 。但它仍然没有解释为什么像 sqrt()、ceil() 等函数在托管上下文中每次都不起作用。

现在我必须解决 OpenGL 的错误,但那是另一回事了 :D(这个项目太可恶了!)

关于c++ - 来自 math.h 的函数使用 C++/clr 返回无效结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28572377/

相关文章:

c相当于matlab的sind和cost function

c++:没有重载函数的实例?

java - OOP的缺点?

.net - clojure 与 C# 语言

.net - 泛型的设计与实现第 2 部分

c - float_t 和 double_t 格式说明符

c++ - Sscanf() 函数

c++ - 使用 C++ 的二维数组

.NET 进程内存使用 = 5x CLR 堆内存?

c++ - 如何打印出给定范围内的直角三角形的周长和个数?