C++浮点转换为Python浮点错误转换

C++ float into Python float wrong conversion

本文关键字:转换 错误 Python C++      更新时间:2023-10-16

我正在使用SWIG将C++代码封装到Python中。但是浮点数字的转换很奇怪。例如,如果我有下面的函数(用C++编写)

float foo() {
    float x=62.02;
    return x;
}

并在Python 中执行(用SWIG包装后)

>>> import mymodule
>>> mymodule.foo()
62.02000045776367
>>>

它返回CCD_ 1而不是CCD_。

有没有办法告诉SWIG如何进行正确的转换?

这是正确的转换,只是你不能用float精确地表示小数点62.02,就像你不能用小数点表示分数2/3一样。

通过这个简短的代码,您可以看到更多内容,当您将62.02存储为floatdouble时,您将看到C++所看到的内容:http://ideone.com/HvfZb

除了无损float->62.020000457763670转换之外,没有任何转换正在进行。

CCD_ 11不能精确地表示为C CCD_。执行float x=62.02时,变量将包含您提到的值。

我强烈推荐阅读《每一位计算机科学家都应该知道的关于浮点运算的知识》。