As far as I understand now, Decimal is 2 times bigger than Double (128 bits vs 64 bits). So it can represent numbers with bigger precision. But it also uses numeric system with base 10, instead of binary. Maybe the last trait of Decimal affects the following results?
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
As you can see, Double prints as 1.0 again after division and multiplication by 3.0. I tried different divisors, and the situation is the same.
(note for ones who don't know F# - float
is basically synonym for double
in F#)