그래서 모듈러스 연산자가 왜 그렇게 큰 값을 반환하는지 알아 내려고합니다.부동 소수점 연산 - 더블 형의 모듈러 연산자
나는 코드가있는 경우 : 그것은 0.09999999999999995
의 결과를 줄 것이다
double result = 1.0d % 0.1d;
합니다. 나머지 이0
을해야한다는 것을 의미 10.0
의 결과를 줄 것이다 double result = 1.0d/0.1d;
-이 문제는 분할 연산자를 사용하여 존재하지 않는 0
참고의 가치를 기대하는 것이다.
오류가 존재한다는 사실에 놀랄 일이 아닙니다. 오류가 너무 깁니다. 큰과 비교해 놀랍습니다. 0.0999 ~ = 0.1 및 0.1은 0.1d
과 동일한 크기 순서이고 1.0d
에서 멀리 떨어진 크기의 한 자리수입니다. 그게 당신이 double.epsilon과 비교할 수 없거나 "< 0.00001 차이가 있다면 그 동등 함"이라고 말할 수 있습니다.
StackOverflow에서이 주제에 관해서는 onetwothree 등의 게시물을 읽었습니다.
누구나이 오류가 왜 그렇게 큰지 설명 할 수 있습니까? 미래에 문제가 생기는 것을 피할 수있는 제안 (10 진수를 대신 사용할 수는 있지만 그 성능에 대해서는 우려하고 있습니다).
편집 : 나는 0.1이라는 숫자가 infinitely repeating series of numbers in binary이라는 것을 구체적으로 지적해야한다.
0.1000000000000000055511151231257827021181583404541015625입니다. – dan04
나는 계산을 이해한다. 한 가지 설명 - "0 = 0.1 mod 0.1 이후 mod의 실제 오류는 0.1 - 0.09999999 ... - 매우 작습니다." 내 결과가 0.099999 이었기 때문에 혼란 스럽지만 실제 결과는 0입니다. 실제 오류는 어떻게 0.1-0.099999입니까? 이 부분에 대한 오류 계산을 좀 더 자세하게 설명해 주시겠습니까? – CrimsonX
은 향후 독자를 위해 이전 댓글에 대한 답변을 제공합니다. 편집 섹션이 이에 응답합니다. (짧은 설명 : 모드의 불안정성 (톱니 모양의 기능)으로 인해 오류가 큽니다. 'a'가 약간 증가하면 (예 : 10.0001) 결과가 0에 가까워집니다) –