あくまで備忘録なんで雑に記録します
①Decimal使い方
小数点計算にはDecimal(十進固定及び浮動小数 型)が便利な様子
まずはそのままの小数をprint()
f = 0.1
g = 0.2
print(f, g)
#0.1 0.2 (そのままでは問題ない)
print(f + g)
#0.30000000000000004(二進数で処理しているから誤差が)
そこでDecimal
from decimal import Decimal as D
print(D(f) + D(g))
#0.3000000000000000166533453694(そのままDecimalでもダメ、str型が必要らしい)
print(D(str(f)) + D(str(g)))
print(D('0.1') + D('0.2'))
#0.3
#0.3
使い方は
①import decimal>>>decimal.Decimal(‘数字’)
②from decimal import Decimal>>>Decimal(‘数字’)
③from decimal import Decimal as D>>>D.(‘数字’)
のどれか
②どんな時に必要?
for i in range(100):
print(i/100)
#0.01〜0.99まできれいにでる、ただし小数指定なしはfloatで認識していると思います
for i in range(100):
print(1 + i/100)
#float+floatとか、float+intとか、演算すると誤差が生まれ、1.1400000〜とか変なのがでる
for i in range(100):
print(1 + i)
#当たり前かもしれないけど int + int はきれい
for i in range(100):
print(1 + D(str(i/100)))
#int + Decimal型はきれい
#小数になり得る場所をDecimal化するのかな
③int型やfloat型、Decimal型と平方根
・float/int と **0.5/math.sqrt(数)の組み合わせ
・Decimal と 数.sqrt()の組み合わせ
※書き方に注意
from decimal import Decimal as D
import math
a = 1 + float(0.14)#1.1400000000000001
b = 1 + D('0.14')#1.14
print(a ** 0.5)#1.0677078252031311
print(math.sqrt(a))#1.0677078252031311
print(b.sqrt())#1.067707825203131121081152397
print(a.sqrt())#エラー
print(b ** 0.5)#エラー
まとめ
for i in range(n)内のi はint型
指定なし整数はint型
指定なし小数はfloat型
int型やfloat型の平方根は: **0.5 もしくは math.sqrt(数)
**0.5 は複素数とかもいけるらしい
Decimal化して十進数扱いの平方根は>数.sqrt()・・・違いに注意
コメント