부동소수점 수는 소수점 뒤에 자릿수가 0개 이상인 수예요. 예를 들면 -2.4, 0.1, 3.14, 5., 16.984025, 1024.0 같은 것들이 있어요.
부동소수점 타입마다 소수점 뒤에 저장할 수 있는 자릿수가 달라요. 이 자릿수를 정밀도라고 해요.
Go에는 두 가지 부동소수점 타입이 있어요:
float32: 32비트(정밀도 약 6~9자리).float64: 64비트(정밀도 약 15~17자리).
이 타입이 기본 부동소수점 타입이에요.여기서 알 수 있듯이 두 타입은 저장할 수 있는 자릿수가 서로 달라요. 즉, float32에 원주율을 저장하려고 하면 처음 6~9자리만 저장돼요(마지막 자리는 반올림돼요).
Go는 기본적으로 부동소수점 수에 float64를 사용해요. 다만 다음 경우에는 예외예요:
float32인 변수에 할당되는 경우.float32인 함수에서 반환되는 경우.float32() 함수에 인자로 전달되는 경우.math package 안에는 유용한 수학 함수가 많이 들어 있어요.
이 연습 문제에서는 저축 계좌를 다뤄요. 매년 저축 계좌의 잔액은 이자율에 따라 갱신돼요. 은행이 제공하는 이자율은 계좌에 있는 금액, 즉 잔액에 따라 달라져요:
0달러 미만이면 3.213%예요 (잔액이 더 음수가 돼요).0달러 이상 1000달러 미만이면 0.5%예요.1000달러 이상 5000달러 미만이면 1.621%예요.5000달러 이상이면 2.475%예요.해야 할 과제는 네 개예요. 각 과제에서는 잔액과 이자율을 다뤄요.
주어진 잔액에 대한 이자율을 계산하는 InterestRate() 함수를 구현해요:
InterestRate(200.75)
// => 0.5
반환되는 값은 float32 타입이에요.
주어진 잔액에 대한 이자를 계산하는 Interest() 함수를 구현해요:
Interest(200.75)
// => 1.003750
반환되는 값은 float64 타입이에요.
이자율을 고려해서 연간 잔액 업데이트를 계산하는 AnnualBalanceUpdate() 함수를 구현해요:
AnnualBalanceUpdate(200.75)
// => 201.75375
반환되는 값은 float64 타입이에요.
매년 이자가 잔액에 더해진다는 점을 고려해서, 원하는 잔액에 도달하는 데 필요한 최소 연수를 계산하는 YearsBeforeDesiredBalance() 함수를 구현해요.
즉, 1년 후 잔액은 시작 잔액 + 시작 잔액에 대한 이자예요.
2년 후 잔액은 1년 후 잔액 + 1년 후 잔액에 대한 이자예요.
이런 식으로, 해당 연도의 잔액이 목표 잔액 이상이 될 때까지 반복해요.
balance := 200.75
targetBalance := 214.88
YearsBeforeDesiredBalance(balance, targetBalance)
// => 14
반환되는 값은 int 타입이에요.
Exercism에 가입하고 Go 트랙을 개념 34개연습 문제 166개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.