「数値型の計算誤差」の版間の差分

38行目: 38行目:
   {
   {
     print(“二値は等しいと認められました”);
     print(“二値は等しいと認められました”);
  }
==一度整数にした後で変換する==
他の方法は、例えば一度整数にしてから計算する方法もあります。
import “Alice.Math”;
///与えられた数の小数点以下の桁数を取得します
function GetDisitsUnder1(number num)
  {
    var priceString = price.ToString().TrimEnd('0');
    int index = priceString.IndexOf('.');
    if (index == -1){return 0;}
    return priceString.Substring(index + 1).Length;
  }
///二つの小数が等しいかどうかを判断します
function NumEqual(number numA,numbner numB)
  {
    //numA,numBの小数点以下の桁数(すなわち、10の何乗倍すれば整数になるか)
    var nAd = GetDisitsUnder1(numA);
    var nBd = GetDisitsUnder1(numB);
    //二つの小数の小数点以下桁数のうち多い方
    var dis = math_max(nAd,nBd);
   
    //numA,numBを整数化したもの
    var rA = numA * (dis ** 10);
    var rB = numB * (dis ** 10);
   
    return (rA == rB);
  }
///二つの小数の和を求めます
function Sum(number numA,number numB)
  {
    //numA,numBの小数点以下の桁数(すなわち、10の何乗倍すれば整数になるか)
    var nAd = GetDisitsUnder1(numA);
    var nBd = GetDisitsUnder1(numB);
    //二つの小数の小数点以下桁数のうち多い方
    var dis = math_max(nAd,nBd);
   
    //numA,numBを整数化したもの
    var rA = numA * (dis ** 10);
    var rB = numB * (dis ** 10);
    //整数化されたものの計算結果
    var result = rA + rB;
    return (result / (dis ** 10));
   }
   }