前回までの記事
X = 4.3 - 4.2 このとき、Xの値は?(前編)
前編では、コンピュータで小数どうしの計算を行うと、誤差が生じることを紹介しました。
後編は、それに対する対策を1つ紹介します。
手順1:Chocolateyをインストール
install_chocolatey.ps1
#PowerShellを管理者にて実行しておく
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
手順2:Haskell Platformをインストール
install_haskellplatform.ps1
choco install haskellplatform
手順3:以下の関数をPowerShellで定義
有理数計算or有理数どうしの等値判定
filter :=([string]$compare){
$left = [Double](ghc -e "fromRational($_::Rational)")
if($compare -eq ""){
$left
}else{
$right = [Double](ghc -e "fromRational($compare::Rational)")
$left -eq $right
}
}
他にも「:!=」「:<=」・・・といったような関数を同様に用意すれば、一通りの比較演算はできそうです。
手順4:使用例(PowerShell)
有理数計算
"4.3 - 4.2" |:=
#0.1
有理数どうしの等値判定
"4.3 - 4.2" |:= "0.1"
#True
面倒くさがりな筆者にとって、割と納得のいく方法になったので、一旦記事を終わりにします。(前編で、色々試すと言いましたが、すみません)
※まあ、欲を言えば、本当は「"」も「|」も「:」も付けたくなかったのですが・・・
他のアイデアがあればご教示頂けるとありがたいです。