2012-01-21 36 views
0

私はC++コードをPythonにラップするためにSWIGを使用しています。しかし、浮動小数点数の変換は変です。私は、PythonC++がPythonに浮動小数点浮動小数点を変換する

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

に以下の関数(C++で書かれた)

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

を有し、(SWIGで包装した後)、それを実行した場合 は例えば、62.02000045776367代わりに62.02返します。

SWIGに適切な変換方法を伝える方法はありますか?

答えて

4

- >double変換、何もありませんコンバージョンが進行中です。

62.02は、C floatと正確には表現できません。 float x=62.02を実行すると、その変数にはあなたが言及した値が含まれます。

私は非常に読むWhat Every Computer Scientist Should Know About Floating-Point Arithmeticをお勧めします。

+0

それはばかな質問だった。私は間違ったタイプを使用していることに気付かなかった。 'double'を使ってすべてを解決しました。ありがとうございます!!! –

+3

@CaioS。、それでもリンクを読んでください。これは単なる「浮動」対「二重」問題ではなく、多くのプログラミング言語の非常に基本的な側面です。 –

5

これは正しい変換です。を10進数で表すことはできませんが、floatを使用して正確に10進数の62.02を表すことはできません。あなたは、あなたがfloatdouble両方として62.02を保存する際にC++が見ているものが表示されますこの短いコード、ともう少し見ることができます

http://ideone.com/HvfZbロスレスfloat以外

+0

しかし、Pythonで正確な値を取得する方法はありますか? –

+1

また、Pythonのfloat型はC++のdouble型に対応しています。 floatからdoubleへの変換のため、精度の差が見られています。 – casevh

+2

@Caio:*はCが持つ正確な値です。最初は「62.02」ということはありません。 @CaioS。 –

関連する問題