2009-12-02 2 views
6

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

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

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

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

ответ

13

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

let result = pown 42I 42

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

+0

Это все еще не работает в ситуациях pow (bigint, bigint) или в pow (sometype, bigint) вообще я вижу, но учитывая влияние власти, которая не будет большой проблемой, я думаю, – Peter

+4

+1 для полностью pwning эти числа;) – RCIX

2

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

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

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

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

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