目次
はじめに
10年ほど、プログラミングをしているのに、
剰余のremとmodを理解していなかったので、
Twitterでいろいろ教えてもらった内容をメモしておきます。
rem と modを理解するのに参考になるツイート
うお。。。PythonとJuliaで余り演算子%の挙動が違うぞ。。。Pythonは-1%2=1だけど、Juliaは-1%2=-1になる。どちらが一般的なんだろうか?🤔 pic.twitter.com/YR0cro0NCy
— Atsushi Sakai (@Atsushi_twi) 2019年1月2日
R だと
— ysaito (@ysaito8015) 2019年1月2日
> -1 %% 2
[1] 1
C, GO, PHP, JS, Swift, Elixir も -1 ですね
— ysaito (@ysaito8015) 2019年1月2日
Ruby, Perl は 1 でしたhttps://t.co/aAL5MRwPRL
ありがとうございます😀。すごく面白い結果ですね。-1派が多いのがビックリしました。1派は動的言語に多い感じにですね。この差はどのような哲学から来るのか気になります。
— Atsushi Sakai (@Atsushi_twi) 2019年1月2日
ですね。歴史的背景が知りたくなってきました。
— Atsushi Sakai (@Atsushi_twi) 2019年1月2日
FW外から失礼。#Julialang の余り関数 rem(x,y) と mod(x,y) があって、rem は x と同じ符号の余り、mod は y と同じ符号の余りを返します。
— まるこすぎ てんふー (@tenfu2tea) 2019年1月6日
( x % y は rem(x,y) と同じです。)
Scheme や Common Lisp も同じ定義で、Julia も踏襲したのでしょう。
情報ありがとうございます😀。勉強不足でremとmodの違いを知りませんでした。lisp系の影響なんですねー。面白いです。ただPython のコードをJuliaに置き換えることが多いので注意が必要ですね。
— Atsushi Sakai (@Atsushi_twi) 2019年1月6日
追記 #Julialang (先ほどの Lisp由来か?は私の推測です)
— まるこすぎ てんふー (@tenfu2tea) 2019年1月7日
余り rem と mod に対応する整数の商は、それぞれ div と fld です。
div(x, y) = trunc(Int, x/y) 小数部分切捨て (x ÷ y と書けます)。
fld(x, y) = floor(Int, x/y) 床関数。
#Julia言語https://t.co/KNXE89sICh
— 黒木玄 Gen Kuroki (@genkuroki) 2019年1月2日
私は -3 % 5 は -3 ではなく 2 になって欲しいと思う感覚。
Juliaでは
mod(-3, 5) → 2
rem(-3, 5) → -3
-3 % 5 → -3
modを使えばよい。
invmodやpowermodは結構使う機会がある。https://t.co/7iSyo8TA9F pic.twitter.com/CxZH8K2X8o
剰余のとり方にはremとmodがあり、競プロで便利なのはmodの方なのですが、Cとかの%だと不便なremで実装されていることが多く、WAの原因になるのですhttps://t.co/UXHX0SHV4K pic.twitter.com/3g1NYQBw95
— hsjoihs (@hsjoihs) 2018年3月27日
mod と rem の違いはこれが、一番わかり易い: 除算後の剰余 - MATLAB rem - MathWorks 日本 https://t.co/wCI54qp3D3
— Atsushi Sakai (@Atsushi_twi) 2019年1月20日
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。