動かざることバグの如し

殿、温めておいたバグがこちらでございます

Rubyでcomparison of Float with NaN failedエラー

rubyでなんかバッチ回してたら、普段見ないエラーに遭遇した

rake aborted!
ArgumentError: comparison of Float with -6.94 failed

ウチなんも悪いことしてないのにとか思ってたけど、やっぱり悪かった

原因

NaNのせい

当然だが、rubyでは0で割ろうとすると例外が発生する

irb(main):005:0> 0/0
ZeroDivisionError: divided by 0

が、floatに変換して割ると例外は発生しない そしてNaNが返ってくる

[4] pry(main)> 0/0.to_f
=> NaN

で、本来小数点が入るであろう配列をsortしようとしたので

> [0,1,2,0/0.to_f,3,4].sort
ArgumentError: comparison of Fixnum with NaN failed

冒頭のエラーが発生したというわけ