如何在OCaml中使用标准模运算

如何在OCaml中使用标准模运算,ocaml,modulo,Ocaml,Modulo,在OCaml-1 mod 3中;;返回-1,但我希望结果是2。是否还有其他模指令或类似指令?Ocaml遵循C对模的定义: 当整数被除时,/运算符的结果是丢弃任何分数部分的代数商。90如果商a/b是可表示的,则表达式a/b*b+a%b应等于a 90这通常称为向零截断 这意味着它给出了-n+1到n-1或0到n-1范围内的余数。这是如何实施分歧的一个不幸的副作用。对绝对值进行除法,最后对符号进行校正 要获得正模,可以使用: # let (mod) x y = ((x mod y) + y) mod y

在OCaml-1 mod 3中;;返回-1,但我希望结果是2。是否还有其他模指令或类似指令?

Ocaml遵循C对模的定义:

当整数被除时,/运算符的结果是丢弃任何分数部分的代数商。90如果商a/b是可表示的,则表达式a/b*b+a%b应等于a

90这通常称为向零截断

这意味着它给出了-n+1到n-1或0到n-1范围内的余数。这是如何实施分歧的一个不幸的副作用。对绝对值进行除法,最后对符号进行校正

要获得正模,可以使用:

# let (mod) x y = ((x mod y) + y) mod y;;
val ( mod ) : int -> int -> int = <fun>
# -1 mod 3;;
- : int = 2
# 4 mod 3;;
- : int = 1


Ocaml遵循C对模的定义:

当整数被除时,/运算符的结果是丢弃任何分数部分的代数商。90如果商a/b是可表示的,则表达式a/b*b+a%b应等于a

90这通常称为向零截断

这意味着它给出了-n+1到n-1或0到n-1范围内的余数。这是如何实施分歧的一个不幸的副作用。对绝对值进行除法,最后对符号进行校正

要获得正模,可以使用:

# let (mod) x y = ((x mod y) + y) mod y;;
val ( mod ) : int -> int -> int = <fun>
# -1 mod 3;;
- : int = 2
# 4 mod 3;;
- : int = 1


“Ocaml遵循C的定义…这意味着…取决于CPU如何在除法上循环”答案的一部分在1999年之前是正确的,但由于C99标准,C中除法的行为是标准化的,不取决于“CPU如何循环”。1999年之前的编译器就是这样,这意味着你得到了CPU所做的事情,而且碰巧的是,标准化的行为几乎是所有处理器都在做的事情,但是暗示它取决于处理器现在选择的是什么是误导的“Ocaml遵循C的定义…这意味着…取决于CPU在除法上的循环方式”答案的一部分在1999年之前是正确的,但由于C99标准,C中除法的行为是标准化的,不取决于“CPU如何循环”…这取决于1999年之前的编译器,这意味着你得到了CPU所做的事情,而且碰巧的是,标准化的行为是几乎所有处理器都在做的事情,但是暗示它取决于处理器现在选择的是什么是误导性的