to_a
по целому ряду целых чисел ведет себя по-другому в этом случае. UPTO 15 знаков после запятой, include?
возвращает false
, но как только он достиг 16 знаков после запятой массив считает десятичную цифру в качестве части массива.Почему в рубине работает следующее?
Почему?
2.2.1 :020 > (1..9).to_a.include?(8.999999999999999)
=> false
2.2.1 :021 > (1..9).to_a.include?(8.9999999999999999)
=> true
2.2.1 :022 >
И почему диапазон только говорит, что это правда
2.2.1 :001 > (1..9).include?(8.9)
=> true
'(1..9) .INCLUDE? (8.9)' то же самое, чем '1 <= 8.9 8.9 && <= 9'. Я думаю, что это понятно, почему это возвращает «истина». Но '(1..9) .to_a' возвращает массив' [1,2,3,4,5,6,7,8,9] '. Это приводит к вопросу, почему '8.9999999999999999 == 9' eval для' true', но '8.999999999999999 == 9' to' false'? Плавающие точки shenanigans ... – spickermann
Еще один *** «почему не номера работают на языке х» *** вопрос. xd – ndn
@spickermann, вы должны написать это как ответ. – ndn