Kích thước của số nguyên trong PHP phụ thuộc vào nền tảng .
Kích thước của một số nguyên phụ thuộc vào nền tảng, mặc dù giá trị tối đa khoảng hai tỷ là giá trị thông thường (đó là 32 bit được ký). Các nền tảng 64 bit thường có giá trị tối đa khoảng 9E18. PHP không hỗ trợ số nguyên không dấu. Kích thước số nguyên có thể được xác định bằng cách sử dụng hằng số PHP_INT_SIZE và giá trị tối đa bằng cách sử dụng hằng số PHP_INT_MAX kể từ PHP 4.4.0 và PHP 5.0.5.
Kích thước của phao, cũng phụ thuộc vào nền tảng :
Kích thước của một float là phụ thuộc vào nền tảng, mặc dù tối đa ~ 1,8e308 với độ chính xác khoảng 14 chữ số thập phân là một giá trị phổ biến (định dạng IEEE 64 bit).
và có một cảnh báo lớn màu đỏ trong hướng dẫn về độ chính xác của phao:
Số dấu phẩy động có độ chính xác hạn chế. Mặc dù phụ thuộc vào hệ thống, PHP thường sử dụng định dạng chính xác kép của IEEE 754, điều này sẽ gây ra lỗi tương đối tối đa do làm tròn theo thứ tự 1.11e-16. Các phép toán số học không phải là số học cơ bản có thể cho các lỗi lớn hơn và tất nhiên, việc xem xét lỗi phải được xem xét khi một số phép toán được gộp.
Ngoài ra, các số hữu tỷ có thể biểu diễn chính xác như các số dấu phẩy động trong cơ sở 10, như 0,1 hoặc 0,7, không có biểu diễn chính xác như các số dấu phẩy động trong cơ sở 2, được sử dụng bên trong, bất kể kích thước của lớp phủ. Do đó, chúng không thể được chuyển đổi thành các đối tác nhị phân nội bộ của chúng mà không mất một chút chính xác. Điều này có thể dẫn đến kết quả khó hiểu: ví dụ: sàn ((0,1 + 0,7) * 10) thường sẽ trả về 7 thay vì 8 như mong đợi, vì đại diện bên trong sẽ giống như 7.999999999999999991118 ....
Phần mở rộng BC Math bỏ qua các phụ thuộc, cho phép bạn chỉ định rõ ràng một số nguyên lớn dưới dạng một chuỗi và tránh việc diễn giải các số nguyên của PHP. Các chức năng GMP cũng là lựa chọn thay thế tốt và hoạt động theo cách tương tự. Chúng ta có thể giả định một cách an toàn any size
đề cập đến kích thước tối đa của chuỗi, chỉ bị giới hạn bởi bộ nhớ khả dụng :
Không có vấn đề gì khi một chuỗi trở nên rất lớn. PHP áp đặt không có ranh giới về kích thước của một chuỗi; giới hạn duy nhất là bộ nhớ khả dụng của máy tính mà PHP đang chạy.
Cho dù nó có ý nghĩa hay không chỉ có thể được quyết định trên cơ sở từng trường hợp. Tôi chưa bao giờ nhận thấy bất kỳ vấn đề hiệu suất thực tế nào với các chức năng của tiện ích mở rộng, nhưng chắc chắn là chúng không nhanh như các lựa chọn thay thế.
Có thực sự cần thiết?
Nó chỉ cần thiết khi nó là, nhưng điều đó không phải lúc nào cũng rõ ràng. Bạn có thể dễ dàng xác định lạm dụng trắng trợn, nhưng không thể dễ dàng tranh luận về các tình huống phức tạp hơn.
Thảo luận với đồng nghiệp của bạn và tìm hiểu lý do tại sao anh ta sử dụng chúng ở mọi nơi . Tràn đầy dẫn đến những tình huống cực kỳ xấu xí, những tình huống mà tôi thấy khá khó khăn để xác định và giải quyết. Nếu anh ta lạm dụng BC Math, có thể chỉ vì anh ta bị mắc kẹt khủng khiếp một lần và cố gắng chơi nó an toàn nhất có thể. Mặc dù không có gì sai khi sử dụng BC Math, nhưng hình phạt hiệu suất không đáng kể có thể là một vấn đề nghiêm trọng trong một số tình huống. Nếu bạn nhận thấy bất kỳ vấn đề về hiệu suất, hãy đảm bảo rằng bạn lập hồ sơ cho ứng dụng của mình và chắc chắn rằng đó là BC Math liên quan.
Luôn nhớ rằng các tính toán của bạn phải hoạt động chính xác:
- Trên mọi hệ thống bạn đang nhắm mục tiêu, bao gồm các máy phát triển riêng lẻ và (tất nhiên) máy sản xuất.
- Bất kể có thể nâng cấp hoặc hạ cấp hệ thống / nền tảng.
Trong phát triển đa nền tảng, bạn phải luôn coi giới hạn thấp nhất là giới hạn cứng. Nếu bạn hoàn toàn chắc chắn rằng các tính toán của bạn sẽ không vượt quá giới hạn (bao gồm cả kết quả của chúng), thì không có điểm nào trong việc sử dụng BC Math.
Nhưng nếu những gì bạn mô tả là anh ấy thích echo bcadd("1", "2");
hơn echo 1+2;
, chúc may mắn!
Tôi đã tìm thấy một bài đăng blog cực kỳ thú vị và có liên quan trong danh sách dấu trang khổng lồ của tôi, Số nguyên trong PHP, chạy bằng kéo và tính di động , trên blog Hiệu suất MySQL của Percona. Nó đã cũ (2007) nhưng nó cung cấp một cái nhìn tổng quan tốt về các snafus khác nhau với tính di động nguyên trong PHP.