Есть ли замена для Pow в BigInteger в F #? - PullRequest
6 голосов
/ 02 декабря 2009

Я использовал функцию Pow класса BigInteger в F #, когда мой компилятор сказал мне:

Эта конструкция устарела. Этот участник был удален, чтобы Тип двоично совместим с типом .NET 4.0 System.Numerics.BigInteger

Достаточно справедливо, я думаю, но я не нашел замену сразу.

Есть ли один? Должны ли мы использовать только наши собственные функции Pow? И (как) он будет заменен в NET4.0?

Ответы [ 2 ]

13 голосов
/ 02 декабря 2009

Вы можете использовать функцию pown

let result = pown 42I 42

pown работает с любым типом, который понимает умножение и единицу

2 голосов
/ 10 сентября 2013

Если вы посмотрите на F # с точки зрения того, что он основан на OCaml, то у модуля OCaml Num есть power_num. Поскольку OCaml type num - это рациональные числа произвольной точности, они могут обрабатывать числа любого размера, например, они не ограничены регистром ЦП, потому что они могут выполнять математические операции символически. Кроме того, поскольку num определяется как

тип num =
| Int of int
| Big_int of Big_int.big_int
| Соотношение Ratio.ratio

они могут обрабатывать очень маленькие числа без потери точности из-за типа Ratio.

Поскольку F # не имеет типа num, Джек создал модуль FSharp.Compatibility.OCaml , который имеет num.fs и доступен через NuGet.

Таким образом, вы можете получить всю необходимую вам точность, и функции num могут обрабатывать отрицательные показатели.

...