toán học chính xác tùy ý là gì?
Số học chính xác tùy ý hay còn gọi là "bignum math", giới thiệu cách thực hiện các phép toán số học trên các số có số chữ số chỉ bị giới hạn bởi lượng bộ nhớ có sẵn. Đây là sự khởi đầu với số học chính xác cố định được CPU/ALUs của hệ thống máy chủ lưu trữ và kích thước/độ chính xác tối đa của số được biểu diễn là hệ số số bit của thanh ghi của các bộ xử lý phần cứng này.
Số học chính xác cố định nhanh, hiệu quả liên quan đến bộ nhớ và được tích hợp sẵn/phổ dụng. Tuy nhiên, điều này có thể áp dụng cho các phạm vi số giới hạn (nếu chỉ đôi khi "đủ lớn"). Số học chính xác tùy ý chậm hơn, phần nào lãng phí dung lượng lưu trữ và yêu cầu các thư viện chuyên biệt như GMP hoặc BCMath.
sự khác biệt giữa BCMath và thư viện GMP là gì
Sự khác biệt nổi bật nhất được rằng GMP hoạt động trên [chính xác tùy ý] nguyên giá trị, trong đó BCMath cho phép [chính xác tùy ý] thập phân/float giống như giá trị.
Cả API rất khó để tìm hiểu, nhưng BCMath có thể trực quan hơn một chút (ngoài việc hỗ trợ giá trị float-like)
lựa chọn Một của một thư viện cụ thể hơn một số khác thường được thúc đẩy bởi mục đích sử dụng (hoặc bởi sự sẵn có trên một nền tảng nhất định). Cho đến khi bạn nhận được nhiều tiền vào các ứng dụng MP, hầu hết thư viện sẽ phù hợp với hóa đơn và nói chung là tương đương (trong lớp học của nó, tức là tránh thư viện chỉ số nguyên nếu bạn cần số dấu phẩy động).
loại BCMath/GMP nào có?
Giống như hầu hết các gói toán chính xác tùy ý, hai thư viện này sử dụng chuỗi cho API của chúng, tức là đại diện cho giá trị số đầu vào và đầu ra của chúng.
Nội bộ ... Một số gói như GMP có đại diện riêng của họ cho các số. Cụ thể của các cấu trúc như vậy thường là sự thỏa hiệp giữa việc giảm thiểu các yêu cầu lưu trữ và cho phép tính toán nhanh (bao gồm cả việc "tuần tự hóa/deserializing" cấu trúc như vậy đến/từ các tệp văn bản.)
Ví dụ "\x12\x23\x45\x67"
trong câu hỏi được gọi là BCD tức là mã nhị phân Thập phân. Nó cho phép lưu trữ 2 chữ số thập phân cho mỗi byte và đôi khi được sử dụng bởi các thư viện Arithrary Precision Arithmetic.
Về lý thuyết cả hai cho phép số lượng bất kỳ chiều dài được sử dụng, miễn là họ đang đưa vào thư viện như dây đàn. Nó nắm lấy bất cứ cái nào có API đẹp hơn cho các mục đích của bạn. bc hoạt động hoàn toàn với các chuỗi, trong khi gmp có thể chấp nhận các chuỗi nhưng cũng sử dụng các biểu diễn bên trong của nó. –
Lưu ý: để làm việc với arithmetics chính xác tùy ý, bạn có thể sử dụng một thư viện như [brick/math] (https://github.com/brick/math) sử dụng GMP, BCMath, hoặc thậm chí cả PHP thuần đằng sau hậu trường một cách tự động , tùy thuộc vào tính khả dụng của từng tiện ích mở rộng. Bằng cách này bạn không cần phải chọn giữa GMP và BCMath, và có một API OO tốt để chơi cùng. – Benjamin