2017-11-29 5 views
0

아래의 A와 B 중 A만이 29 인 이유는 무엇입니까? x 인수로 계산을 사용하는 것과 다른 점은 무엇입니까?계산을 통과 할 때 예상 결과가 제공되지 않는 층

#A 
floor(x = (1.45/0.05)) 
#B 
floor(x = 29) 

> #A 
> floor(x = (1.45/0.05)) 
[1] 28 
> #B 
> floor(x = 29) 
[1] 29 
+1

부동 소수점 문제 : 'sprintf ("%. 100f", 1.45/.05)' – bouncyball

+0

@bouncyball 감사합니다! 그리고 다시 : KoenV 예는 복제본처럼 보입니다. 저는보다 광범위한 r 언어 규칙보다는 라운드 기능과 관련된 것들을 찾고있었습니다. 사과. – DataJack

답변

0

@bouncyball과 마찬가지로 부동 소수점 문제입니다.

예를 들어 this link으로 이동하고 1.45 또는 0.05를 입력하면 바이너리 표현이 "무한히"길다는 것을 알 수 있습니다 (즉, 바이너리로 유한 문자열로 1.45 개를 쓸 수 없음).
PC에 숫자를 저장할 수있는 무한한 저장 장치가 없기 때문에 어떤 시점에서이 코드를 "잘라 버릴"수 있습니다 - 기본적으로 1.45는 1.49999999999 (9의 수는 신경 쓰지 마십시오)와 같은 것으로 나타납니다. 0.05도 마찬가지입니다.

이제 컴퓨터가 28.9999999999999와 같은 것을 얻습니다.하지만 출력 할 때 컴퓨터가 바보가 아닙니다. 그는 잘, 28.9999999999는 아마 29 일 것으로 생각된다 - 그래서 그가 그것을 출력 할 때 그는 단지 라운드한다. "바닥"을 사용하여 반올림한다고 명시한 경우를 제외하고 28.99999999를 28로 반올림합니다.
희망이 있습니다.