アカウント名:
パスワード:
正解は「9.0」(筆算で9.0を出したあとで、0を消す)。画像を見ると、ちゃんと0に赤で斜め線が入ってます。授業の中では、後ろの0は斜め線で消すように、と指導を受けているのに対し、それを実行してないから減点。
有効数字的に9.0の方が正しいだろってツッコミが散見されますが、小学算数には有効数字の概念はありません。
電卓でも、Excelでも、型の緩いスクリプト系言語でも、3.9+5.1は9になるのは結構一般的だと思いますが、「php -r "print(3.9+5.0);"」とやって9.0にならないのはおかしいってツッコミは見たことないですね。浮動小数点数には有効数字の概念がないからそういう事になるわけで、おんなじことです。
ちなみに「えんぴつはなんぼんありますか」みたいな問題で「1ほん」と答えても減点。正解は「1ぽん」
数学とスクリプト言語の話は混同しない方が良いと思います
数学と異なりスクリプト言語では1) 数値の型2) 有効桁3) printのような表示関数(つまり変数を文字列に変換する処理)を考慮する必要があります
1)の点ではphp -r 'var_dump(3.9+5.1);'php -r 'var_dump(9);'の結果を見れば判るように3.9+5.1は内部的にはfloat型で9はint型で表現されます
つまりPHPにおける 3.9+5.1 は「9」ではなくて「float型の9」 です3.9+5.1が 「int型の9」になると勘違いしていると痛い目にあいます
次に 2)の話でPHPのfloat型は IEEE 754に従っていてるので有効けたは7桁ぐらいです
float型の 9 は 大雑把に言えば 9.0000000 と表現されていることになります
スクリプト言語で有効桁のことを忘れていると痛い目にあいます
最後に3)の話で
float の9 が画面にどのように表示されるかは,使用する関数により異なります php -r 'print(3.9+5.1);' php -r 'printf("%d", 3.9+5.1);' php -r 'printf("%f", 3.9+5.1);'これは実行すると999.000000となるはずです
print(3.9+5.1) の結果をみて それを整数の9 だと勘違いしていると痛い目にあいます
話の内容には基本的に賛同はしますが、1)、2)は今回の問題の本論とはまったく関係ないです。#PHPの3.9+5.1はdoubleなので、有効数字は53bit=10進で15桁強、というツッコミはしておきます。
私が問題にしているのは> 3) printのような表示関数(つまり変数を文字列に変換する処理)これの一点。
「(書式を指定しない)一般的な数値の表示」では「3.9+5.1」は「9」と書くのが一般的であり、そういう利用ケースに併せるために、電卓やExcelやスクリプト系言語などでも「9」となるような実装が行われている、ということが言いたかったんです。
printfは書式を指定してるんですから、この論からはちょっと外れます。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
吾輩はリファレンスである。名前はまだ無い -- perlの中の人
筆算の問題 (スコア:2)
正解は「9.
0」(筆算で9.0を出したあとで、0を消す)。画像を見ると、ちゃんと0に赤で斜め線が入ってます。授業の中では、後ろの0は斜め線で消すように、と指導を受けているのに対し、それを実行してないから減点。有効数字的に9.0の方が正しいだろってツッコミが散見されますが、小学算数には有効数字の概念はありません。
電卓でも、Excelでも、型の緩いスクリプト系言語でも、3.9+5.1は9になるのは結構一般的だと思いますが、「php -r "print(3.9+5.0);"」とやって9.0にならないのはおかしいってツッコミは見たことないですね。浮動小数点数には有効数字の概念がないからそういう事になるわけで、おんなじことです。
ちなみに「えんぴつはなんぼんありますか」みたいな問題で「1ほん」と答えても減点。正解は「1ぽん」
Re:筆算の問題 (スコア:1)
数学とスクリプト言語の話は混同しない方が良いと思います
数学と異なりスクリプト言語では
1) 数値の型
2) 有効桁
3) printのような表示関数(つまり変数を文字列に変換する処理)
を考慮する必要があります
1)の点では
php -r 'var_dump(3.9+5.1);'
php -r 'var_dump(9);'
の結果を見れば判るように
3.9+5.1は内部的にはfloat型で
9はint型で表現されます
つまりPHPにおける 3.9+5.1 は「9」ではなくて「float型の9」 です
3.9+5.1が 「int型の9」になると勘違いしていると痛い目にあいます
次に 2)の話で
PHPのfloat型は IEEE 754に従っていてるので
有効けたは7桁ぐらいです
float型の 9 は 大雑把に言えば 9.0000000 と表現されていることになります
スクリプト言語で有効桁のことを忘れていると痛い目にあいます
最後に3)の話で
float の9 が画面にどのように表示されるかは,使用する関数により異なります
php -r 'print(3.9+5.1);'
php -r 'printf("%d", 3.9+5.1);'
php -r 'printf("%f", 3.9+5.1);'
これは実行すると
9
9
9.000000
となるはずです
print(3.9+5.1) の結果をみて それを整数の9 だと勘違いしていると
痛い目にあいます
Re:筆算の問題 (スコア:1)
話の内容には基本的に賛同はしますが、1)、2)は今回の問題の本論とはまったく関係ないです。
#PHPの3.9+5.1はdoubleなので、有効数字は53bit=10進で15桁強、というツッコミはしておきます。
私が問題にしているのは
> 3) printのような表示関数(つまり変数を文字列に変換する処理)
これの一点。
「(書式を指定しない)一般的な数値の表示」では「3.9+5.1」は「9」と書くのが一般的であり、
そういう利用ケースに併せるために、電卓やExcelやスクリプト系言語などでも「9」となるような実装が行われている、
ということが言いたかったんです。
printfは書式を指定してるんですから、この論からはちょっと外れます。