То, что вы написали, будет работать в автономной CTP-версии F #.
Эта ошибка возникает в VS2010, поскольку тип BigInteger был перемещен из библиотеки F # в базовую библиотеку .Net4.0. Я не уверен, связана ли эта проблема с установкой F # CTP и бета-версии VS2010.
Пока не будет найдено лучшее решение, вы можете свернуть свое собственное преобразование следующим образом:
let numToDouble (n:bignum) = double n.Numerator / double n.Denominator
Чтобы преобразовать bignum в целое число, вы можете подумать о чем-то вроде этого:
let numToInt (n:bignum) = int n.Numerator / int n.Denominator
Но это довольно опасно: переполнится довольно легко. Лучшей версией numToInt было бы сначала преобразовать в double, а затем преобразовать в int:
let numToInt = int << numToDouble
Тем не менее, оба преобразования не идеальны для числителей / знаменателей, состоящих более чем из 308 цифр, которые все равно будут переполнены двойным, тогда как сама дробь может быть небольшой.
напр .: 11 ^ 300/13 ^ 280 ~ = 3,26337, но
> numToDouble (pown 11N 300 / pown 13N 280);;
val it : float = nan