2013-03-16 2 views
0

float 번호에 대한 모듈러스를 찾아야합니다. 이를 위해 Modulo를 가져 오는 fmodf와 관련된 문제

,이에 대한 출력은 0.0f로

해야

NSLog(@"value >> %f",fmodf(2.0f, 0.1f)); 

을 사용하고하지만 출력 값 >> 0.1

방법은 무엇입니까?

+0

0.1은 부동 소수점으로 정확하게 표현 될 수 없습니다. –

+0

참고 : http://stackoverflow.com/questions/15446902/ios-rounding-a-float-with-roundf-is-not-working-properly –

답변

4

컴파일러는 소스 텍스트 0.1f을 가장 가까운 표현 가능한 값으로 변환합니다. .1에 가장 가까운 IEEE-754 32 비트 부동 소수점 값 (iOS에서 사용)은 0.100000001490116119384765625입니다.

귀하는 2 및 0.100000001490116119384765625 인수를 사용하여 fmodf을 평가합니다. 후자의 값을 2에서 19 번 빼면 나머지는 0.099999971687793731689453125이므로 리턴 값이됩니다. 표시를 위해 소수 자리로 반올림 한 경우 결과는 "0.1"입니다.

+0

그러나 이것은 상식에 따라 잘못되었습니다. :) 우리가 올바른 결과를 얻을 수있는 방법에 대한 모든 솔루션 ?? – mayuur

+2

@ mayuur : 해결하려는 문제에 대한 상황을 제공해야합니다. 왜 잔류 물을 찾으려고하니? 'fmodf'가 올바른 결과를 리턴했음을 주목하십시오; 주어진 인수에 대한 정확한 수학 피연산자를 리턴합니다. 당신은 부정확 한 주장을했습니다. 어떤 경우에는 반올림 오류가 없도록 값을 정수 (예 : 정수)로 스케일링하여 정확한 인수를 제공 할 수 있습니다. 다른 경우에는 반올림 오류를 허용하도록 디자인합니다. –

관련 문제