0

Wavefront .obj ファイルを OpenGL アプリケーション ( tinyobjloader ) に読み込むライブラリを使用しています。オブジェクトのロード中にエラーがあることに気付きました。たとえば、座標のオブジェクトをロードすると。0.9999999 は 0 に設定されています。デバッグにより、次のメソッドがこの動作を生成することがわかりました。

static inline float parseFloat(const char*& token)
{
    token += strspn(token, " \t");
    float f = (float)atof(token);
    token += strcspn(token, " \t\r");
    return f;
}

したがって、atof() は float ではなく int を返します。「stdlib.h」を含めずに atof() を使用すると、一部のコンパイラが警告をスローせず、結果として atof() が整数を返すことを読みました。

不思議なのは、「stdlib.h」を含めてもエラーが残ることです。この動作の原因がわかりません。

何か案が?

4

2 に答える 2

0

atof のドキュメントはこちらでご覧いただけます。一部の浮動小数点は 32 ビットで表すことができないため、エラーが発生し、返される値はゼロです。

//Try these 
float f = 0.9999999 ;
cout << atof("0.9999999") << " " << f << endl;//output is 1 1 

したがって、表示されているのは有効な動作です。strtod ()を試してみてください。

于 2013-07-19T09:37:15.937 に答える