비율계산

정리

프로그래밍을 하다가 보면 특정 scale 범위의 값을 지정한 scale 범위를 갖는 값으로 변환하여 사용해야 하는 경우가 종종 발생합니다. 통상적으로 비율은 다음과 같이 표시합니다.
x1 : x2 = y1 : y2


그리고 이것은 다음과 동일한 등가식입니다. (사실상 이 등가식만 알면 모든것은 끝났습니다. 이것만으로 어떠한 비율이라도 구할수 있게 됩니다.)
x1 * y2 = x2 * y1


이를 활용하여 백분율은 다음과 같이 정의되어 계산될수 있습니다.
x : 100 = value : max
x * value = 100 * max
x = ( 100 * value ) / max


여기서 예를 들면 총 500개의 사과가 있다고 했을때 이중에 20% 는 몇개의 사과를 말할까요?
20 : 100 = x : 500
20 * 500 = 100 * x
x = ( 20 * 500 ) / 100 = 10000 / 100 = 100


즉, 500개 중에서 20%는 100개가 됩니다. 프로그래밍에서의 백분율 표시는 이렇게도 구현할수 있을겁니다.
void print_percent(long s_value, long s_max)
{
long long s_man;

s_man = (((long long)s_value) * 10000ull) / s_max;

(void)fprintf(stdout, "%llu.%02llu%%\n", s_man / 100ull, s_man % 100ull);
}


위의 예제소스는 소수점이하 2자리까지만 표시하고 소수점 계산을 회피하고 정수계산만으로 소수점이하 2자리를 표시하기 위해서 백분율을 만분율로 계산하여 정부부분과 소수점부분을 100 이라는 배율값으로 나누어지게 구현한 것입니다.

이 밖에도 비율공식은 너무 광범위하게 사용되므로 꼭 머리속에 새겨넣어야 하는 공식중에 한가지라고 주장합니다.



/*
[ FrontPage | PrintView | RawView | RSS ]

Copyright ⓒ MINZKN.COM
All Rights Reserved.

MINZKN
*/