なぜシステムが方法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)で"
私は「intにBIGNUM」と「BIGNUM倍増させる」などのような変換を行いたい場合は、私は何ができますか?どうもありがとうございました。
解決
あなたが書いたことはF#スタンドアロンCTPで動作します。
BigIntegerのタイプは.Net4.0コアライブラリにF#のライブラリから移動してきたため、このエラーは、VS2010で発生します。私は、この問題は、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桁、の分母/分母のために理想的ではない。
例:11 ^ 13分の300 ^ 280〜= 3.26337が、
> numToDouble (pown 11N 300 / pown 13N 280);;
val it : float = nan