现状方法有什么作用?

时间:2013-10-07 11:59:08

标签: ruby

请考虑byar gem中的以下方法:

##
# Calculate lower boundary for observed cases
def self.lower_bound(obs, z_value = Z_VALUE)
  return 0 if obs == 0
  obs * (1 - 1.quo(9 * obs) - z_value.quo(3 * Math.sqrt(obs))) ** 3
end

##
# Calculate upper boundary for observed cases
def self.upper_bound(obs, z_value = Z_VALUE)
  obs = obs + 1
  obs * (1 - 1.quo(9 * obs) + z_value.quo(3 * Math.sqrt(obs))) ** 3
end

我想将这些方法移植到Javascript,但我不确定quo是做什么的。

1 个答案:

答案 0 :(得分:6)

quo是在Numeric类上定义的方法(并在Float类中重新定义),它使用给定的计算接收器的论点。换句话说,x.quo(y)大致相当于x / y,但更多精确

xyFixnum s(即整数值)时,差异就出现了:

> (1 / 2)
=> 0
> (1 / 2).class
=> Fixnum
> 1.quo(2)
=> (1/2)
> 1.quo(2).class
=> Rational
> 1.quo(2.5)
=> 0.4
> 1.quo(2.5).class
=> Float

基本上,quo可以确保通过隐藏RationalFloat来准确表达除法结果,具体取决于接收者和参数。

在Javascript中,不同类型的数字之间没有区别,如果需要,除法会返回一个浮点数,因此第一种方法可以表示为:

obs * Math.pow(1 - 1 / (9 * obs) - z_value / (3 * Math.sqrt(obs)), 3)