我正在初始化一個測試兩個公式相等的類的實例。Ruby中的操作順序問題
公式的計算值實際上等於:
RubyChem::Chemical.new("SOOS").fw
=> 96.0
RubyChem::Chemical.new("OSSO").fw
= 96.0
當我創建了一個新的類來檢查這兩個實例的平等我有點對結果感到驚訝:
x = RubyChem::BalanceChem.new("SOOS","OSSO")
x.balanced
=>false
y = RubyChem::BalanceChem.new("SOOS","SOOS")
y.balanced
=> true
的RubyChem :: BalanceChem初始化方法是在這裏:
def initialize(formula1, formula2)
@balanced = RubyChem::Chemical.new(formula1).fw == RubyChem::Chemical.new(formula2).fw
end
爲什麼不紅寶石取FW公式1和公式2的值,並檢查這些值的相等性? Ruby中的操作順序是什麼?Ruby在做什麼?我可以看到我對這個問題缺乏瞭解。我該如何做這項工作?先謝謝你。
你會用什麼而不是浮點比較?在化學中,我可能需要的最具特異性是0.00001;在數學運算中使用浮點數有什麼好處嗎? – 2010-07-28 19:52:17
使用浮點而不是其他類型沒有明顯的優勢,並且要非常精確,您還必須考慮重要數字並處理舍入問題。然而,將所有數據乘以10k並使用整數運算也是有問題的,所以我現在會堅持使用浮點數。如果您需要的最高精度是.00001,那麼處理比較的最佳方法是通過我上面描述的方法,使用(x-y).abs <0.000001左右作爲您的最大平均值。錯誤通常超出1e-9範圍,所以這可以。 – drharris 2010-07-28 21:03:22