さかもとのブログ

つらつらと

浮動小数点が久しぶり

いやー恥ずかしい。

codeIQでなんとなしにpythonの初級者問題をやっていたら、

num = 0
cnt = 0

while num < 1:
    num += 0.1
    cnt += 1

print cnt

選択肢の問題だったが、「そら10だっぺ」と解答したらぶぶー。11でした。 あー浮動小数点。

num = 0
cnt = 0

while num < 1:
    num += 0.1
    cnt += 1
    print "num = {0:.20f}".format(num)

print cnt
num = 0.10000000000000000555
num = 0.20000000000000001110
num = 0.30000000000000004441
num = 0.40000000000000002220
num = 0.50000000000000000000
num = 0.59999999999999997780
num = 0.69999999999999995559
num = 0.79999999999999993339
num = 0.89999999999999991118
num = 0.99999999999999988898
num = 1.09999999999999986677
11

でもこれPythonだけじゃないよ、ってツッコミはやめておく。

package main

import "fmt"

func main() {
        num := 0.0
        cnt := 0

        for num < 1 {
                num += 0.1
                cnt += 1
                fmt.Println(num)
        }
        fmt.Println(cnt)
}
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
11