2017-09-19 8 views
2

나는이 표현이 : 나는 부동 소수점 비트 제거합니까 그것은 내가 형을 정수로 변환 어떻게 단지 1을 생산 얼마나라켓에서 부동 소수점을 제거하는 방법?

#i1.0 

: 평가

(floor (sqrt 2)) 

. 나는 문서를 보았지만 아무 것도 발견하지 못했다. 감사.

+2

'부정확 -> 정확한'. –

+0

고맙습니다. 그게 전부 야. – mtheorylord

답변

2

몇 가지 방법으로 @Alexis는 inexact->exact을 지적 할 것입니다. 그러나 floor을 사용하면 racket/math (#lang racket 프로그램에 기본적으로 포함되어 있음)으로 제공되는 더욱 쉬운 솔루션 인 exact-floor이 있습니다.

이 함수는 floor와 동일한 의미를 갖지만, 한 가지 예외는 정확하지 않은 숫자가 아닌 예외입니다. 물론

> (floor 1.2) 
1.0 
> (exact-floor 1.2) 
1 

, 그 +inf.0+nan.0 (및 관련 변종) 이후에만 부동 소수점 숫자를 더 정확한 아날로그가없는 점에 유의하는 것이 중요합니다, 당신은 그 캐스팅 할 수 없습니다 :

> (floor +inf.0) 
+inf.0 
> (exact-floor +inf.0) 
; exact-floor: contract violation 
; expected: rational? 
; given: +inf.0 
; [,bt for context] 

기본적으로 floor 함수는 real? 숫자로 작동하고 exact-floor 함수는 rational? 숫자로 작동합니다. 그러나 정확하지 않은 경로를 사용하는 경우에도 동일한 제한이 적용됩니다.