2009-12-02 6 views
6

私のコンパイラは私に言ったとき、私はF#でのBigIntegerクラスのパウ機能を使用していました:F#のBigIntegerにPowの代わりがありますか?

この構築物が推奨されていません。このメンバは、この タイプは十分に私は推測するが、私はすぐに交換が見つかりませんでしたフェア.NET 4.0タイプSystem.Numerics.BigInteger

とのバイナリ互換性があることを確実にするために削除されました。

1つはありますか?独自のPow関数のみを使うべきですか?そして(どのように)NET4.0で置き換えられますか?

答えて

13

あなたは

let result = pown 42I 42

pownは乗算と '1' 'を理解する' ことをどのようなタイプで動作pown機能を使用することができます。

+0

これはまだ一般的にはpow(bigint、bigint)の状況やpow(sometype、bigint)では動作しませんが、私が考える大きな問題ではない電力の影響を考えてみてください。 – Peter

+4

+1それらの数字を完全に発声する;) – RCIX

2

OCamlに基づいているという観点からF#を見ると、OCaml Num moduleにはpower_numがあります。 OCaml型numは任意精度の有理数なので、任意のサイズ番号を扱うことができます。彼らはCPUのレジスタによって制限されていませんので、彼らは数学的に象徴的に行うことができます。また、numは

num =
として定義されているため、 int of int
| Big_int.big_intのBig_int
| Ratio of比率

Ratioタイプのために、精度の損失を伴わずに非常に小さな数値を処理できます。

F番号にnum型がないため、Jackはを持つFSharp.Compatibility.OCamlモジュールを作成し、NuGet経由で利用できます。

これにより、必要な精度をすべて得ることができ、num関数は負の指数を扱うことができます。

関連する問題