Esiste un sostituto per Pow in BigInteger in F #?
-
11-09-2019 - |
Domanda
Stavo usando la funzione Pow della classe BigInteger in F #, quando il mio compilatore mi ha detto:
Questo costrutto è deprecato. Questo utente è stato rimosso per assicurare che questo tipo è compatibile a livello binario con il tipo di .NET 4.0 System.Numerics.BigInteger
Fiera abbastanza immagino, ma non ho trovato subito una sostituzione.
C'è uno? Dovremmo utilizzare solo le nostre funzioni Pow? E (come) sarà sostituito in NET4.0?
Soluzione
È possibile utilizzare la funzione pown
let result = pown 42I 42
pown funziona su qualsiasi tipo che 'capisce' moltiplicazione e 'uno'.
Altri suggerimenti
Se si guarda a F # dal punto di vista di essere basato su OCaml, allora la modulo di OCaml Num ha power_num. Poiché OCaml tipo num sono precisione arbitraria numeri razionali che possono gestire un numero qualsiasi dimensione, ad esempio essi non sono limitati dal registro delle CPU, perché possono fare la matematica simbolicamente. Anche perché num è definito come
Tipo num =
| Int di int
| Big_int di Big_int.big_int
| Rapporto tra Ratio.ratio
in grado di gestire un numero molto esiguo, con la perdita di precisione a causa del tipo di rapporto.
Dato che F # non ha il tipo num, Jack creato il modulo FSharp.Compatibility.OCaml che ha num.fs ed è disponibile tramite NuGet.
Così si può ottenere tutta la precisione che si desidera utilizzare questo, e le funzioni di num in grado di gestire esponenti negativi.