정렬 시 주의 사항 [더블]

4910 단어 haskell
NaN이 목록에 포함되어 있으면 예상대로 정렬되지 않습니다.

> import Data.List
> let nan = 0/0 :: Double
> sort [3,2,nan,1,5,nan,4]
[1.0,4.0,NaN,5.0,NaN,2.0,3.0]

이 동작은 nan을 자체 또는 숫자와 비교할 때 이상한 동작으로 인한 것 같습니다.

> nan < nan
False
> nan == nan
False
> nan > nan
False
> compare nan nan
GT
> nan < 0
False
> nan == 0
False
> nan > 0
False
> compare nan 0
GT

와 공포.

NaN이 포함될 가능성이 있는 목록을 정렬할 때 사용하는 것이 좋습니다isNaN.

isNaN :: RealFloat a => a -> Bool

NaN을 제거하거나 적절한 처리 후에 정렬합니다.

> sort . filter (not . isNaN) $ [3,2,nan,1,5,nan,4]
[1.0,2.0,3.0,4.0,5.0]

> sort . map (\x -> if isNaN x then -1 else x) $ [3,2,nan,1,5,nan,4]
[-1.0,-1.0,1.0,2.0,3.0,4.0,5.0]

좋은 웹페이지 즐겨찾기