Snapdragon X Eliteで問題なく倍精度計算できるか確認した。
確認はFortranコードを使用した。
コードはこちらのコードをお借りした。
単精度と倍精度の結果の違い
まずは単精度で計算する。
program gosa
implicit none
integer i
real delta, time
delta = 0.1
time = 0
do i = 1, 1000
time = time + delta
end do
print '("time = ", f18.13)', time
end program gosa
結果は次のようになった。正しい答えは100となる。
time = 99.9990463256836
次に倍精度で計算する。
program gosa
implicit none
integer i
double precision delta, time
delta = 0.1d0
time = 0d0
do i = 1, 1000
time = time + delta
end do
print '("time = ", f18.13)', time
end program gosa
結果は次のようになった。
time = 99.9999999999986
倍精度で計算することで誤差が少なくなっていることがわかる。
倍精度変数への数値の代入
次に倍精度変数に単精度の数値を代入してみる。
double precision a
a = 1.23
print *, a
end
実行結果は次のようになり、誤差が乗っている。
1.2300000190734863
次に倍精度の指定をした数値を代入する。
double precision a
a = 1.23d0
print *, a
end
結果は次のようになり、誤差がないことがわかる。
1.2300000000000000
まとめ
特に問題なく倍精度の計算ができることが分かった。