KDOC 115: 負の値が関わる剰余挙動の違い

この文書のステータス

  • 作成
    • 2024-03-01 貴島
  • レビュー
    • 2024-03-24 貴島

言語によって異なる挙動

負の値に対する剰余をしたときの値は、プログラミング言語によって異なる。試す。

Go言語。

fmt.Println(-8 % 5)
fmt.Println(8 % -5)
-3
3

C言語

printf("%d\n", -8 % 5);
printf("%d\n", 8 % -5);
-3
3

Emacs Lisp

(format "%s\n%s" (number-to-string (% -8 5)) (number-to-string (% 8 -5)))
-3
3

Rubyでは逆になる。

sprintf("%d\n%d", -8 % 5, 8 % -5)
2
-2

まとめ

細かい違いがある。