BigInteger 構造体を使用して計算を実行できます。
public static Fixed8 operator /(Fixed8 a, Fixed8 b)
{
Fixed8 result;
result._numerator = (long)( new BigInteger(a._numerator) *
new BigInteger(DENOMINATOR) /
new BigInteger(b._numerator) );
return result;
}
完全なコード:
public const long DENOMINATOR = 1 << 24;
private long _numerator;
public Fixed8(double value)
{
_numerator = (long)(value * DENOMINATOR);
}
public static Fixed8 operator /(Fixed8 a, Fixed8 b)
{
Fixed8 result;
result._numerator = (long)( new BigInteger(a._numerator) *
new BigInteger(DENOMINATOR) /
new BigInteger(b._numerator) );
return result;
}
public static explicit operator double(Fixed8 a)
{
return (double)a._numerator / (double)DENOMINATOR;
}
public override string ToString()
{
return ((double)this).ToString();
}
例:
var a = new Fixed8(7);
var b = new Fixed8(1.7);
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(a / b);
出力:
7
1.69999998807907
4.11764705181122