恥ずかしながら、何も考えずに答えは0じゃないの。
と思ったけど、よくよく考えると式が成立しないので、各言語ではどういう挙動を起こすのか試してみた。
0は割れるけど、0では割れないことをゼロ除算(ぜろじょざん)というらしい。
話題の投稿
x.com/charlow_illust/status/1802187149607051370
要約すると、
問5. 0 / 8 = 0 ← わかる
問6. 18 / 0 = ? ← 答えは0って言われたらしいけどほんとに0?
という感じの投稿。
そもそも式が成り立たない
↓これは成り立つ。
0 / 8 = 0
0 = 0 * 8
0 * 8 = 0
↓これは成り立たない。
18 / 0 = 0
18 = 0 * 0
0 * 0 = 18
各言語(go, php, javascript)の挙動
golang
エラーが出る。
package main
import (
"fmt"
)
func main() {
fmt.Print(0 / 10, "\n")// 0
fmt.Print(10 / 0, "\n")// invalid operation: division by zero
}
php
php なら何か起きるのではないかとちょっと期待したけどちゃんとエラーになった。
<?php
var_dump(0 / 10);// int(0)
var_dump(10 / 0);// Fatal error: Uncaught DivisionByZeroError: Division by zero in /xxxx.php:3 Stack trace: #0 {main} thrown in /xxxx.php on line 3
?>
javascript
console.log(0 / 10)// 0
console.log(10 / 0)// Infinity
イ、インフィニティ。。。?
一応エラーではない。
golang その2
float64 で扱えば、こちらもエラーは出ず、インフィニティ。
int で扱えば panic が起きる。
package main
import (
"fmt"
)
func main() {
fmt.Print(float64(10) / getZeroAsFloat64(), "\n")// +Inf
fmt.Print(10 / getZeroAsInt(), "\n")// panic: runtime error: integer divide by zero
}
func getZeroAsFloat64() float64 {
return 0
}
func getZeroAsInt() int {
return 0
}
まとめ
ちゃんとよろしくないエラーが起きる可能性は含んでいるので、
割り算するプログラム書く時は気をつけよう。