Slide 46
Slide 46 text
パフォーマンスを比較してみた
float
で受け取った数字を足し算してstring
に戻す関数
func AddByShift(a, b float64, shiftDigit int) string {
shift := math.Pow10(shiftDigit)
ai := int(a * shift)
bi := int(b * shift)
return strconv.FormatFloat((float64(ai+bi) / (shift)), 'f', shiftDigit, 64)
}
func AddByBigFloat(a, b float64, prec int) string {
af := new(big.Float).SetFloat64(a)
bf := new(big.Float).SetFloat64(b)
return new(big.Float).SetPrec(uint(prec)).Add(af, bf).Text('f', prec)
}
func AddByRat(a, b float64, prec int) string {
ar := new(big.Rat).SetFloat64(a)
br := new(big.Rat).SetFloat64(b)
return ar.Add(ar, br).FloatString(prec)
}
func AddByDecimal(a, b float64) string {
ad := decimal.NewFromFloat(a)
bd := decimal.NewFromFloat(b)
return ad.Add(bd).String()
}
4. Go
の小数計算のアプローチ
46