2009-12-02 15 views
6

que estaba usando la función Pow de la clase BigInteger en F # cuando mi compilador me dijo:¿Hay un sustituto de Pow en BigInteger en F #?

Esta construcción está en desuso. Este miembro se ha eliminado para asegurar que este tipo es binario compatible con el tipo System.Numerics.BigInteger .NET 4,0

suficiente supongo Feria, pero no encontró un reemplazo de inmediato.

¿Hay uno? ¿Deberíamos usar nuestras propias funciones de Pow? Y (¿cómo) será reemplazado en NET4.0?

Respuesta

13

Usted puede utilizar la función pown

let result = pown 42I 42

pown funciona en cualquier tipo que 'entiende' multiplicación y 'uno'.

+0

Todavía no funciona en situaciones de pow (bigint, bigint) o en pow (tipo, bigint) en general, lo veo, pero dado el impacto de la potencia que no sería un gran problema, creo que – Peter

+4

+1 para empujando totalmente esos números;) – RCIX

2

Si observa F # desde la perspectiva de estar basado en OCaml, entonces el OCaml Num module tiene power_num. Como OCaml type num son números racionales de precisión arbitraria, pueden manejar cualquier número de tamaño, p. no están limitados por el registro de la CPU porque pueden hacer los cálculos simbólicamente. También desde num se define como

tipo num =
| Int de int
| Big_int de Big_int.big_int
| Ratio de Ratio.ratio

pueden manejar números muy pequeños sin pérdida de precisión debido al tipo de Ratio.

Como F # no tiene el tipo num, Jack creó el módulo FSharp.Compatibility.OCaml que tiene num.fs y está disponible a través de NuGet.

Para que pueda obtener toda la precisión que desee con esto, y las funciones num pueden manejar exponentes negativos.