2009-12-02 29 views
6

Tôi đã sử dụng hàm Pow của lớp BigInteger trong F # khi trình biên dịch của tôi nói với tôi:Có thay thế cho Pow trong BigInteger trong F # không?

Cấu trúc này không còn được dùng nữa. Thành viên này đã bị xóa để đảm bảo rằng loại này tương thích nhị phân với hệ thống .NET 4.0 loại.Numerics.BigInteger

Công bằng đủ Tôi đoán, nhưng tôi không tìm thấy thay thế ngay lập tức.

Có cái nào không? Chúng ta chỉ nên sử dụng các hàm Pow của riêng mình? Và (như thế nào) nó sẽ được thay thế trong NET4.0?

Trả lời

13

Bạn có thể sử dụng chức năng pown

let result = pown 42I 42

pown hoạt động trên bất kỳ loại rằng 'hiểu' được nhân giống và 'một'.

+0

Ảnh tĩnh không hoạt động trong các tình huống pow (bigint, bigint) hoặc pow (sometype, bigint) nói chung mà tôi thấy, nhưng với tác động của sức mạnh không phải là vấn đề lớn, tôi nghĩ – Peter

+4

+1 cho hoàn toàn pwning những con số;) – RCIX

2

Nếu bạn nhìn vào F # từ góc nhìn dựa trên OCaml, thì OCaml Num module có power_num. Vì num kiểu số OCaml là số hữu tỉ chính xác tùy ý, chúng có thể xử lý bất kỳ số kích thước nào, ví dụ: chúng không bị giới hạn bởi thanh ghi CPU vì chúng có thể thực hiện toán học một cách biểu tượng. Kể từ khi num được định nghĩa là

loại num =
| Int của int
| Big_int của Big_int.big_int
| Tỷ lệ Ratio.ratio

chúng có thể xử lý các số rất nhỏ với mất độ chính xác do loại Tỷ lệ.

Vì F # không có loại num, Jack tạo mô-đun FSharp.Compatibility.OCamlnum.fs và có sẵn qua NuGet.

Vì vậy, bạn có thể nhận được tất cả độ chính xác bạn muốn bằng cách này, và các hàm num có thể xử lý số mũ âm.