質問

私は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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top