私が今理解している限り、Decimal は Double の 2 倍の大きさです (128 ビット対 64 ビット)。そのため、より高い精度で数値を表すことができます。ただし、バイナリの代わりに基数 10 の数値システムも使用します。Decimal の最後の特性が次の結果に影響するのではないでしょうか?
Microsoft (R) F# Interactive version 11.0.60610.1
Copyright (c) Microsoft Corporation. All Rights Reserved.
For help type #help;;
> let x = 1.0m / 3.0m ;;
val x : decimal = 0.3333333333333333333333333333M
> x * 3.0m ;;
val it : decimal = 0.9999999999999999999999999999M
> let y = 1.0 / 3.0 ;;
val y : float = 0.3333333333
> y * 3.0 ;;
val it : float = 1.0
> it = 1.0 ;;
val it : bool = true
ご覧のとおり、Double は 3.0 による除算と乗算の後、再び 1.0 として出力されます。さまざまな除数を試しましたが、状況は同じです。
(F# を知らない人への注意 -float
基本的に F# では同義語ですdouble
)