「数値型の計算誤差」の版間の差分
編集の要約なし |
|||
(同じ利用者による、間の6版が非表示) | |||
1行目: | 1行目: | ||
{{Alert|この記事のより新しい版が[https://docs.wsoft.ws/products/alice/tutorial/calculation-error/ WSOFTDocs]にあります。AliceScriptWikiでは、この記事はもう更新されません。||04}} | |||
[[Category:チュートリアル]] | [[Category:チュートリアル]] | ||
AliceScriptの数値型は、倍精度浮動小数点数数値型と定められており、この規格はIEEE754として標準化されています。 | AliceScriptの数値型は、倍精度浮動小数点数数値型と定められており、この規格はIEEE754として標準化されています。 | ||
16行目: | 18行目: | ||
なおこのような誤差は、AliceScript固有のものではありません。IEEE 754の2進浮動小数点形式を採用しているシステムでは、同じことが起こりえます。 | なおこのような誤差は、AliceScript固有のものではありません。IEEE 754の2進浮動小数点形式を採用しているシステムでは、同じことが起こりえます。 | ||
=回避策= | =回避策= | ||
41行目: | 42行目: | ||
} | } | ||
==一度整数にした後で変換する== | ==一度整数にした後で変換する== | ||
他には、例えば一度整数にしてから計算する方法も考えられます。次の例では、二つの数を整数にすることができる数<code>dis ** 10</code>を求めて二数を整数にした後、計算を行うことで誤差を防ぎます。ただしこの場合でも、有効数字15桁以上の数は正確に扱うことができません。 | |||
import “Alice.Math”; | import “Alice.Math”; | ||
86行目: | 87行目: | ||
return (result / (dis ** 10)); | return (result / (dis ** 10)); | ||
} | } | ||
print(NumEqual(0.1+0.2,0.3));//出力例:true | |||
print(Sum(0.1,0.2));//出力例:0.3 |