· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Ratio

비율계산

정리

프로그래밍을 하다가 보면 특정 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 이라는 배율값으로 나누어지게 구현한 것입니다.

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

ID
Password
Join
Be careful how you get yourself involved with persons or situations that can't bear inspection.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2012-01-26 11:12:53
Processing time 0.0034 sec