xで話題になった、0は割れるけど、0では割れないやつ。を各言語で試してみた。

恥ずかしながら、何も考えずに答えは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
}

まとめ

ちゃんとよろしくないエラーが起きる可能性は含んでいるので、
割り算するプログラム書く時は気をつけよう。