请考虑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
是做什么的。
答案 0 :(得分:6)
quo
是在Numeric
类上定义的方法(并在Float
类中重新定义),它使用给定的计算接收器的商论点。换句话说,x.quo(y)
大致相当于x / y
,但更多精确。
当x
和y
为Fixnum
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
可以确保通过隐藏Rational
或Float
来准确表达除法结果,具体取决于接收者和参数。
在Javascript中,不同类型的数字之间没有区别,如果需要,除法会返回一个浮点数,因此第一种方法可以表示为:
obs * Math.pow(1 - 1 / (9 * obs) - z_value / (3 * Math.sqrt(obs)), 3)