Ok, I must admit, I've not seen such am alarming example of float mathematics going wrong before. This is kinda scary.
While I have your attention though... how do you get around the decimal rounding problem:
declare @a decimal (38,28) = 1.123456789
declare @b decimal (38,28) = 1.123456789
declare @c decimal (38,28) = 1.123456789
select @a * @b * @c
?