2016-12-07 9 views
3

atof()はdoubleを返します。これは浮動小数点値に代入すると警告になります(浮動小数点数を使用する必要があります)。atof()doubleの代わりにfloat

私の質問は:atof() - 普通の浮動小数点を返すバリアントがありますか?あるいは、私はキャストでこれを解決しなければなりません。これは、すぐに捨てられるダブルを作成するためのリソースを無駄にするので、残念です。

+3

本当に問題ではありません。結果を変数に代入する場合は、キャストしてもしなくても問題ありません。それ以上のメモリは使用されません。コンパイラには最適化された関数があります。早すぎる最適化をしないでください。良い、読みやすい、保守可能なコードを書くことに集中してください。 –

+2

ソフトウェア浮動小数点の埋め込みプラットフォームを使用していない限り、CPUはすべての浮動小数点値を倍精度のレジスタに格納する可能性が最も高いです。 – Art

+1

私はハードウェアの単精度とソフトウェアの倍精度浮動小数点の組み込みプラットフォームを使用しているため、この質問を記録しています。 – ojs

答えて

2

代わりにstrtofを使用すると、floatが返されます。

See documentation here

+2

質問には[ansi-c]というタグが付けられています。 [this reference](http://en.cppreference.com/w/c/string/byte/strtof)によれば、 'strtof'がC99に追加されました。コンパイラは、その関数が存在するかどうかを慈悲にしています。 (BTW www.cplusplus.comはCの質問の参考にならない) – user694733

0

プラットフォームは、変換ルーチンを直接「フロートする文字列を」持っていないと、コンパイラが最適化され、それは確かに経由してその変換ルーチンを呼び出します場合は、次のいない場合は使用し、その後、

char *buf = ... 
float y; 
if (sscanf(buf, "%f", &y) == 1) Success(); 

第二は、それが微妙に違反している場合、「浮いているように、文字列」呼び出すために、コンパイラによって最適化することができることを

float y = (float)atof(buf); 

は注意この2番目のコードではそれ以外の場合に発生します。

関連する問題