C ++ плавать в Python плавать неправильное преобразование - PullRequest
0 голосов
/ 22 января 2012

Я использую SWIG, чтобы обернуть мой код C ++ в Python. Но преобразование чисел с плавающей запятой странно. Например, если у меня есть функция ниже (написано на C ++)

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

и выполняет его (после переноса с SWIG) в Python

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

возвращает 62.02000045776367 вместо 62.02.

Есть ли способ рассказать SWIG, как сделать правильное преобразование?

Ответы [ 2 ]

5 голосов
/ 22 января 2012

Это правильное преобразование, просто вы не можете представить десятичное значение 62.02 точно с помощью float, так же, как вы не можете представить дробь 2/3 в десятичном выражении.

Вы можете увидеть немного больше с этим коротким кодом, где вы увидите то, что видит C ++, когда храните 62.02 как float и double: http://ideone.com/HvfZb

4 голосов
/ 22 января 2012

За исключением преобразования без потерь float -> double, преобразование не происходит.

62.02 не может быть представлено в точности как C float.В тот момент, когда вы делаете float x=62.02, переменная будет содержать значение, которое вы упомянули.

Я настоятельно рекомендую прочитать Что должен знать каждый компьютерный специалист об арифметике с плавающей точкой .

...