以下の競プロのサイトの問題で計算結果が想定通りにならなかったので、質問します。
AIZU ONLINE JUDGE
最初は「floatパターン」でコーディングしましたが、100000009 2
という入力に対して以下のように答えと違う結果になってしまいました。その後、「doubleパターン」にコードを修正したところ全問正解となりました。
・正解の計算結果
50000004 1 50000004.50000000
・「floatパターン」での計算結果
50000004 1 50000004.000000
・「doubleパターン」での計算結果
50000004 1 50000004.500000
floatは小数点以下の計算もOKで、数値の範囲もfloat型の中に収まっているはずなのに何故「floatパターン」だと小数点以下の計算ができなくなるのでしょうか?
■floatパターン
#include <stdio.h> int main() { long a, b, d, r; float f; scanf("%ld %ld", &a, &b); d = a / b; r = a % b; f = (float)a / b; printf("%ld %ld %f\n", d, r, f); }
■doubleパターン
#include <stdio.h> int main() { long a, b, d, r; double f; scanf("%ld %ld", &a, &b); d = a / b; r = a % b; f = (double)a / b; printf("%ld %ld %lf\n", d, r, f); }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/26 15:58