Zamierzam dać nieco inną odpowiedź. Jak powiedzieli inni, funkcje mogą robić, co je zdefiniujesz, i m - x = -x
mod m
. Jako preludium, zauważę, że Haskell ma dwie funkcje "mod", mod
i rem
, które różnią się tylko tym aspektem. Możesz zrobić przypadek, że najlepiej jest matematycznie wpisać mod
. Numer rem
odpowiada temu, co uzyskasz na procesorze x86. W rzeczywistości jest trzecia, euklidesowa, która może być jeszcze lepsza i opisana przez Raymonda Boute w The Euclidean Definitions of the Functions Div and Mod. Trzeci formularz zawsze zwraca dodatni moduł. (Istnieją w rzeczywistości co najmniej dwa inne opcje, które można wybrać.)
Definicja Javascript jest tym, co można uzyskać z większości kodów maszynowych mod
. W tym sensie może być lepszym rozwiązaniem, ponieważ mogłoby to zwiększyć jego skuteczność. Matematycznie, definicja Haskella i Pythona jest lepsza niż JavaScript. Istnieje również trzecia definicja, która może być nieco lepsza.
Jedną z kluczowych właściwości, które posiadają definicje euklidesa i Haskella/Pythona jest x mod m = y mod m
, co odpowiada x = y
mod m
, której nie ma definicja Javascript. Możesz zweryfikować, obliczając 6 % 7
w JavaScript.
dla Pythona, zobacz http://python-history.blogspot.de/2010/08/why-pythons-integer-division-floors.html – georg
Zobacz [ ten artykuł] (http://yourdailygeekery.com/2011/06/28/modulo-of-negative-numbers.html), aby uzyskać więcej informacji na temat różnych zachowań w niektórych językach. –