1

考虑在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

4

1 回答 1

6

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

这里的区别在于 whenxyare Fixnums(即整数值):

> (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

基本上,根据接收者和参数,通过返回orquo来确保除法的结果准确表达。RationalFloat

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

obs * Math.pow(1 - 1 / (9 * obs) - z_value / (3 * Math.sqrt(obs)), 3)
于 2013-10-07T12:11:50.697 回答