我使用F#互动,我已经添加FSharp.PowerPack.dll的参考。

当我尝试转换BIGNUM兼作下面的代码,

let n = 2N
let d = double n

错误出来的那个

“:未找到方法:system.missingMethodException而 '双System.Numerics.BigInteger.ToDouble(System.Numerics.BigInteger)' 在Microsoft.FSharp.Math.BigNum.ToDouble(BIGNUM n)的”

我能做些什么,如果我想做出这样的转换,如“BIGNUM为int”和“BIGNUM翻番”?非常感谢。

有帮助吗?

解决方案

您已经写了什么将在F#CTP独立工作。

在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的将要转换为双第一,然后将转换为int:

let numToInt = int << numToDouble

不过,这两个转换是不理想的超过308位,这将仍然溢出双numerators /分母,而分数本身可以是小的。

例如:11 ^13分之300^ 280〜= 3.26337,但

> numToDouble (pown 11N 300 / pown 13N 280);;
val it : float = nan
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top