10 진수를 추출해야합니다. 나는 %%
을 사용하여 this 대답을 찾았습니다.r : 10 진수를 추출하는 %%가 논리 값을 생성하지 않는 이유는 무엇입니까?
방법은 매우 간단합니다 :
0.1%%1
[1] 0.1
나는 10.1을 시도하는 경우 :
10.1%%1
[1] 0.1
하지만 평등을 평가할 때
0.1%%1==10.1%%1
[1] FALSE
왜이 거짓 작동하지 않는 이유는 무엇입니까? 많은 감사
10 진수를 추출해야합니다. 나는 %%
을 사용하여 this 대답을 찾았습니다.r : 10 진수를 추출하는 %%가 논리 값을 생성하지 않는 이유는 무엇입니까?
방법은 매우 간단합니다 :
0.1%%1
[1] 0.1
나는 10.1을 시도하는 경우 :
10.1%%1
[1] 0.1
하지만 평등을 평가할 때
0.1%%1==10.1%%1
[1] FALSE
왜이 거짓 작동하지 않는 이유는 무엇입니까? 많은 감사
이것은 이진 부동 소수점이 10 진수 표현으로 잘 변환되지 않기 때문입니다. 가정 64 비트 IEEE754 부동 소수점 :
0.1에 가까운 부동 소수점 수는 10.1에서 가장 가까운 부동 소수점 숫자 10.0999999999999996447286321199499070644378662109375이다 0.1000000000000000055511151231257827021181583404541015625
이다
넌 소수 부분은 실질적으로 다른 것을 볼 수때문에 정확한 비교는 실패 할 것입니다.
귀하의 특정 사용 사례에 매우 부합하기 때문에 여기에서 구제 조치를 제안하는 것은 어렵습니다. (본능은 1e-13의 추가 공차를 비교할 수 있다고 제안합니다.)
이 부록의 "0.1 %% 1 == round (10.1 %% 1, 1)"이 참이라는 것을 피하기 위해 소수점 1 자리로 반올림 할 수 있습니다. –
'all.equal'은 이것도 같은 것으로 표시합니다. –