Frage

Ich bin mit F # Interactive, und ich habe den Bezug von FSharp.PowerPack.dll hinzugefügt.

Wenn ich versuche, BigNum zu konvertieren, wie der folgenden Code zu verdoppeln,

let n = 2N
let d = double n

Fehler kommt, dass

"System.MissingMethodException: Methode nicht gefunden:. 'Double System.Numerics.BigInteger.ToDouble (System.Numerics.BigInteger)' bei Microsoft.FSharp.Math.BigNum.ToDouble (BigNum n)"

Was kann ich tun, wenn ich solche Umwandlungen wie „BigNum zu int“ und „BigNum zu verdoppeln“ machen will? Vielen Dank.

War es hilfreich?

Lösung

Was Sie geschrieben haben, werden in der F # Standalone-CTP arbeiten.

Dieser Fehler tritt in VS2010, weil der BigInteger-Typ aus dem F # -Bibliothek zur .Net4.0 Core-Bibliothek wurde verschoben. Ich bin nicht sicher, ob dieses Problem etwas hat, beide zu tun, um die F # CTP mit und mit dem VS2010 Beta installiert ist.

Bis eine bessere Lösung entlang kommt, könnten Sie Ihre eigene Umwandlung wie folgt rollen:

let numToDouble (n:bignum) = double n.Numerator / double n.Denominator

Um eine bignum in eine ganze Zahl konvertieren Sie dann so etwas wie diese denken konnte:

let numToInt (n:bignum) = int n.Numerator / int n.Denominator

Aber das ist ziemlich gefährlich: es wird ganz einfach überlaufen. Eine bessere Version von numToInt wäre zu einem Doppel ersten konvertieren und dann in int konvertieren:

let numToInt = int << numToDouble

Dennoch sind beide Umwandlungen nicht ideal für Zähler / Nenner von mehr als 308 Stellen, die noch Überlauf eines Doppelzimmer, während die Fraktion selbst klein sein könnte.

ex: 11 ^ 300/13 ^ 280 ~ = 3,26337, aber

> numToDouble (pown 11N 300 / pown 13N 280);;
val it : float = nan
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top