2013-10-07 4 views
1

Рассмотрим следующие методы, найденные в byar gem:Что делает метод quo?

## 
# 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 делает.

+2

Вы нагуглить? http://www.ruby-doc.org/core-2.0.0/Numeric.html#method-i-quo – sevenseacat

+2

Я действительно нашел это, но на самом деле я его не понимаю. Есть ли: '1.quo (9 * obs)' in Ruby Преобразование в: 'Math.floor (1/(9 * obs))' в JavaScript? –

ответ

6

quo представляет собой метод, определенный на Numeric класса (и переопределен в классе Float), который вычисляет фактор приемника с указанным аргументом. Другими словами, x.quo(y) примерно эквивалентен x/y, но более точный.

Разница возникает, когда x и y являются Fixnum с (то есть целое число.):

> (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 гарантирует, что результат деления выражается точно путем returing в Rational или Float , в зависимости от получателя и аргумента.

В JavaScript нет различия между различными типами чисел и деления возвращает число с плавающей запятой уже, если это необходимо, так что первый метод может быть выражен как:

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

Ответ почти правильный, но вы немного упустили «Math.pow». Должно быть: 'obs * (1 - 1/(9 * obs)) - Math.pow (z_value/(3 * Math.sqrt (obs)), 3)'. Но большое спасибо, это мне очень помогло! –

+0

Вы в этом уверены? Первый метод в вашем вопросе сводится к 'obs * (что-то) ** 3', что эквивалентно' obs * Math.pow (что-то, 3) 'в javascript –

+0

Да, я уверен. В противном случае граничные значения становятся низкими. Это из-за '-' в коде: ' obs * (1 - 1.quo (9 * obs) - z_value.quo (3 * Math.sqrt (obs))) ** 3' станет ' obs * a - b ** 3'. Так что только b должно быть в 'Math.pow'. –

Смежные вопросы