浮動小数点数は、小数点以下に0桁以上の数字がある数値です。例えば-2.4、0.1、3.14、5.、16.984025、1024.0などがあります。
浮動小数点型が異なれば、小数点以下に格納できる桁数も異なります。これをその型の精度と呼びます。
Goには2つの浮動小数点型があります。
float32: 32ビット(精度は約6〜9桁)。float64: 64ビット(精度は約15〜17桁)。
これがデフォルトの浮動小数点型です。ご覧のとおり、どちらの型も格納できる桁数が異なります。つまり、float32に円周率を格納しようとしても、最初の6〜9桁しか格納されません(最後の桁は丸められます)。
デフォルトでは、Goは浮動小数点数にfloat64を使います。ただし、その浮動小数点数が次のいずれかに当てはまる場合を除きます。
float32の変数に代入される場合float32の関数から返される場合float32()関数に引数として渡される場合mathパッケージには、便利な数学関数がたくさん用意されています。
この演習では、貯蓄口座を扱います。 貯蓄口座の残高は、毎年、その利率に基づいて更新されます。 銀行が提示する利率は、口座に入っているお金の額(残高)によって決まります。
0ドル未満の場合は3.213%(残高がさらにマイナスになります)。0ドル以上1000ドル未満の場合は0.5%。1000ドル以上5000ドル未満の場合は1.621%。5000ドル以上の場合は2.475%。この演習には4つのタスクがあり、それぞれで残高と利率を扱います。
指定された残高に基づいて利率を計算する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年後の残高と、それに対する利息を足したものです。
これを、その年の残高が目標残高以上になるまで繰り返します。
balance := 200.75
targetBalance := 214.88
YearsBeforeDesiredBalance(balance, targetBalance)
// => 14
戻り値はintであることに注意してください。