Math类中floorMod方法源码解析

时间:2024-04-09 08:14:15

                                 Math类中floorMod方法源码解析

jdk中源码

Math类中floorMod方法源码解析

Math类中floorMod方法源码解析

if条件语句解释:若符号相同并且摸部位领,则r--

以上代码并不难,带入x,y就可以得出响应的结果,我们这里主要解释下,这个方法的设计初衷

源码解析来源

在《java核心编程卷一》中为我们提供了一个案例来说明这个这个方法的设计初衷

第11版中P39第二段原文如下(没有找到11版pdf)

“     下面考虑这样一个问题:计算一个时钟时针的位置。这里要做一个时间调整,而且要归一化为一个0~11之间的数。这很简单:(position + adjustment) % 12”。不过,如果这个调整为负会怎么样呢?你可能会得到一个负数。所以要引入一个分支,或者使用((position + adjustment) % 12+12)%12。不管怎样都很麻烦。

       floorMod方法就让这个问题变得容易了:flooraMod(position + adjustment,12)总会得到一个0~11之间的数。”

(很遗憾没有没有找到pdf版,所以拍照上传)

Math类中floorMod方法源码解析

floorMod方法解法

结合《java核心编程卷一》我们茅塞顿开,于是正确的解法呼之欲出:

下面我来图解说明:

Math类中floorMod方法源码解析

结合上面两张图我们来说一下floorMod(x,12)的计算方式

从图中可以看出,顺时针为数值增加(+),逆时针为数值减小(-)

若x > 0,顺时针查值,若x < 0,逆时针查值

案例:floorMod(1,12) = 1,floorMod(-1,12) = 11

同理,结合下入说明floorMod(x,-12)的计算方式

Math类中floorMod方法源码解析

从图中可以看出,顺时针为数值减小(-),逆时针为数值增加(+)

若x > 0,逆时针查值,若x < 0,顺时针查值

案例:floorMod(-1,-12) = -1,floorMod(1,-12) = -11