Почему не режут работу, как ожидалось, в R?

Почему эти два результата не возвращают одинаковый результат?

D = data.frame( x=c( 0.6 ) ) D$binned = cut( D$x, seq( 0.50,0.70,0.025 ), include.lowest=TRUE, right=FALSE ) D # 0.6 is binned correctly as [0.6,0.625) D$binned = cut( D$x, seq( 0.55,0.65,0.025 ), include.lowest=TRUE, right=FALSE ) D # 0.6 is binned incorrectly as [0.575,0.6)
2 ответа

D$binned = cut( D$x, round(seq( 0.55,0.65,0.025),3), include.lowest=TRUE, right=FALSE )

D

x binned

1 0.6 [0.6,0.625)


Ошибка представления. Аппроксимация чисел с плавающей точкой является точной, если число представляет собой комбинацию определенных степеней 2. Другие числа отображаются на эти числа. Различные алгоритмы для создания числа могут делать это по-разному и иметь разные ошибки, связанные с ними (т.е. выше или ниже ожидаемого значения). В этом случае:

print(D$x,digits=22)
[1] 0.5999999999999999777955
print(seq(0.5,0.7,0.025)[5],digits=22)
[1] 0.5999999999999999777955
> print(seq(0.55,0.65,0.025)[3],digits=22)
[1] 0.6000000000000000888178

licensed under cc by-sa 3.0 with attribution.