何らかの数値を配列のインデックスの中におさめたい、というときに、手癖でi % array.length
とかして剰余を計算していたのだけど、Arduino言語で結果がマイナスになることがあって、なぜなのか、なんか型が間違ってオーバーフローしてるのかな、とか思ったり、while (i < 0) { i += array.length }
みたいなことをすると期待する結果になるのでオーバーフローしてるわけでもなさそうで変だなあと思っていたら、負数の剰余は言語によって結果が異なるようだった。
確かめるまでもなく、-5 % 3は1に決まってるでしょ…と思っていたら言語によっては-2になるとのこと…。今年一番びっくりした。
大学の授業とかでCを書いてたときは結果がマイナスになるつもりで暮らしていたかもしれないけど、最近は結果がプラスになる言語ばかり書いていたので気分が変わっていたのかもしれない。しかし今デベロッパツールで試したらJavaScriptでも-2が返ってきてさらにびっくりしている…。
shunirr.hatenablog.jp