为什么系统无法找到方法BigInteger.ToDouble?
-
19-09-2019 - |
题
我使用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
不隶属于 StackOverflow