Есть ли замена Pow в BigInteger в F#?

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

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

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

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


person Peter    schedule 02.12.2009    source источник


Ответы (2)


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

let result = pown 42I 42

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

person cfern    schedule 02.12.2009
comment
Он по-прежнему не работает в ситуациях pow(bigint,bigint) или в pow(sometype,bigint) в целом, я вижу, но, учитывая влияние силы, это не будет большой проблемой, я думаю - person Peter; 02.12.2009

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

введите число =
| Целое число
| Big_int из Big_int.big_int
| Соотношение Ratio.ratio

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

Поскольку в F# нет типа num, Jack создал FSharp.Compatibility.OCaml с num.fs и доступен через NuGet.

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

person Guy Coder    schedule 10.09.2013