Java - 误解 ceil 和 floor 方法

3

floor:

返回不大于参数且等于数学整数的最大双精度浮点数值。 ...

ceil:

返回不小于参数且等于数学整数的最小双精度浮点数值。 ...

来源:Oracle文档

关于 floor :如果我输入 System.out.print(Math.floor(2.1)); 返回 2.0。另一个例子: System.out.print(Math.floor(2.8)); 返回 2.0。 我要用这个例子来解释这个描述:如果 floor(2.1) 是最大(接近正无穷大)的结果应该是 3.0 而不是 2.0,因为 2.0 更接近负无穷。 因此,如果我更改关于floor的说明:

返回不小于参数且等于数学整数的最小双精度浮点数值。 ...

对我来说很有意义,我会理解 floor(2.1) 返回 2.0

当我读到“接近正无穷大”和“接近负无穷小”时,我想到数轴:

The number line

来源:Quora

编辑:我的问题是:这个描述搞砸了我的思路。我的逻辑是(例如关于 floor):首先,好的,当我听到floor时,我想到的是最小的而不是最大的。其次,如果返回最大值,则该值应大于参数。ceil 也是同理。


3
你有问题吗? - Scary Wombat
有了您“新的和改进的”floor()描述,为什么floor(2.1)会返回2.0呢?毕竟,1.00.0-1.0等都比2.0更接近负无穷大且更小。 - Ted Hopp
根据您的新定义,floor 总是返回最小可能的 double - Dawood ibn Kareem
关于您的编辑:如果您将floor()ceil()的当前描述视为描述约束优化问题(特别是整数规划问题),则它们的描述是完全合理的。例如,floor(a)解决了约束优化问题,即最大化f(x)= x,其中x是整数且x <= a。 - Ted Hopp
1个回答

3
返回最大的(接近正无穷大)双精度浮点数,该数小于或等于参数并等于一个整数。关键在于“小于或等于参数”这个短语。因此,2.0是最大的双精度浮点数,它小于或等于2.1,并且也等于整数值。ceil同理:描述中提到的是大于或等于输入值的最小值...因此,原始描述实际上是正确的。

我理解那个短语中的关键词。但是如果描述说:“返回最小(接近负无穷大)的双精度值”,我就能理解整个描述,因为:floor(2.8) 返回 2.0 - learnprogramming
@Jason 这里只是有些纠结,但是“largest”意味着最大的幅度。对于正数来说没问题,但对于负数则会返回负无穷大。我认为用“greatest”代替“largest”会更清晰明了。当然,个人见解可能不同。 - Robert Dodier
我猜这就是为什么他们用“最大值(最接近正无穷大)”来澄清的原因。 - Jason
啊,我想我理解了这个描述。我一直试图分别理解“最大值”和“小于或等于参数”的两侧,结果让我很困惑。我将用ELI5的方式来解释它,所以在这个例子中:floor(2.8)就像是说:“嗯,最大值是2.8,所以找到范围在2.8以下的最大值。” - learnprogramming

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接