【问题标题】:Java - Misunderstand ceil and floor methodsJava - 误解 ceil 和 floor 方法
【发布时间】:2019-02-24 07:43:18
【问题描述】:

楼层:

返回小于或等于参数且等于数学整数的最大(最接近正无穷大)双精度值。 ...

细胞:

返回大于或等于参数且等于数学整数的最小(最接近负无穷大)双精度值。 ...

来源:Docs Oracle

关于地板:如果我输入 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(2.1) 返回 2.0

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

来源:Quora

编辑:我要问的是:描述打破了我的想法。我的逻辑是(例如关于 floor):首先,好的,当我听 floor 时,我认为是最小的而不是最大的。其次,如果我返回最大的,那就是大于不小于参数。 ceil

也是如此

【问题讨论】:

  • 您有问题吗?
  • 有了你对floor()的“新的和改进的”描述,为什么floor(2.1)会返回2.0?毕竟,1.00.0-1.0、... 都更接近于负无穷,并且都小于2.0
  • 根据您的新定义,floor 始终返回尽可能小的double
  • 重新编辑:如果您认为floor()ceil() 的当前描述描述了constrained optimization 问题(特别是integer programming 问题),则它们非常有意义。例如,floor(a) 解决了最大化 f(x) = x 的约束优化问题,其约束条件是 x 是整数且 x

标签: java math theory floor ceil


【解决方案1】:

返回小于或等于参数且等于数学整数的最大(最接近正无穷大)双精度值

关键在于短语小于或等于参数

所以 2.0 是最大的双精度值小于或等于 2.1 也等于整数值。

ceil 同上:描述中提到了大于或等于输入值的最小值...

所以,原来的描述其实是对的。

【讨论】:

  • 我理解这句话的关键。但是如果描述会说:“返回最小(最接近负无穷大)双精度值”,我会理解整个描述,因为:floor(2.8) 返回2.0
  • @Jason 只是在这里狡辩,但“最大”表示最大量级。这对于正数是可以的,但对于负数,它会返回负无穷大。我认为说“最大”而不是“最大”会更清楚。 YMMV。
  • 我想这就是他们用largest (closest to positive infinity)澄清的原因。
  • 啊,我想我理解了描述。我试图理解:一方面是“最大”,另一方面是分别“小于或等于论点”,这让我心烦意乱。我将在 ELI5 中解释它,所以在示例中:floor(2.8) 就像是在说:“嗯,最大值是 2.8,所以在 2.8 到以下的范围内找到最大值。”
猜你喜欢
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多