C言語なら俺に聞け! Part 125
■ このスレッドは過去ログ倉庫に格納されています
0264259
2006/04/10(月) 16:43:54ゴメン、嘘吐いた。
float tmp = b * b - 4 * a * c;
で精度が落ちるのは事実だけれど、
(-b + sqrt(b * b - 4 * a * c)) / (2 * a);
と書いてもやはり処理系によっては精度が落ちる。
何故ならば、float a, b, c であるならば(b * b - 4 * a * c)の計算には
doubleへの格上げは「必要ではない」から。
試しに手元のgccでコンパイルしてみたら、どちらも同じ結果になった。
たまたま>261の使ったコンパイラが「暗黙にdoubleへの格上げを行なう」処理系だったのだろう。
#但し、sqrt(b * b - 4.0 * a * c)とすると4.0がdoubleなので間違いなくdoubleで計算される。
■ このスレッドは過去ログ倉庫に格納されています