php nhị phân thập lục phân số chính xác tùy ý base62 cơ sở crockford số lớn chuyển đổi cơ sở crockford-base32
- Cập nhật17/12/2022
- PHP
marius balcytis / toán học
Sao 3
- Mã số
- Vấn đề
- Yêu cầu kéo
Thư viện PHP cho toán học chính xác tùy ý
phép toán php độ chính xác tùy ý bcmath bigdecimal
- Cập nhật13/03/2019
- PHP
Superbalist / tiền php
Sao 9
- Mã số
- Vấn đề
- Yêu cầu kéo
Một thư viện tiền và tiền tệ để xử lý số học chính xác tùy ý
tiền php độ chính xác tùy ý bcmath superbalist thư viện tiền tệ php-money
- Cập nhật ngày 11 tháng 7 năm 2022
- PHP
felixdorn / sey
Sao 13
- Mã số
- Vấn đề
- Yêu cầu kéo
Sey là một trình thông dịch toán học mạnh mẽ với độ chính xác tùy ý
php bcmath chính xác tùy ý
- Cập nhật ngày 1 tháng 10 năm 2022
- PHP
PrestaShop / số thập phân
Sao 16
- Mã số
- Vấn đề
- Yêu cầu kéo
Triển khai hướng đối tượng của phép toán cơ bản với độ chính xác tùy ý, sử dụng BC Math nếu có
php thư viện php độ chính xác tùy ý bcmath hacktoberfest phụ thuộc lõi
- Cập nhật26/10/2022
- PHP
JordanRL / Fermat
Nhà tài trợ
Sao 61
- Mã số
- Vấn đề
- Yêu cầu kéo
Một thư viện cung cấp các phép toán và thống kê cho các số có kích thước tùy ý
thống kê khoa học php phép toán lượng giác hàm ma trận bignum ma trận độ chính xác tùy ý số phức tính toán khoa học biginteger bigint bignumber tính toán ma trận chính xác phân phối poisson phân phối fermat gaussian php8
- Cập nhật ngày 2 tháng 11 năm 2022
- PHP
krowinski / bcmath-mở rộng
Sao 67
- Mã số
- Vấn đề
- Yêu cầu kéo
- thảo luận
Mở rộng thư viện php BCMath cho các chức năng bị thiếu như sàn, trần, tròn, abs, min, max, rand cho các số lớn. Cũng bọc các chức năng BCMath hiện có
toán tiền php toán độ chính xác tùy ý sàn số phức gói nhà soạn nhạc số thập phân rand bignumber abs ký hiệu khoa học ceil deche
Số dấu phẩy động [còn được gọi là "số float", "nhân đôi" hoặc "số thực"] có thể được chỉ định bằng bất kỳ cú pháp nào sau đây
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
chính thức
LNUM [0-9]+ DNUM [[0-9]*[\.]{LNUM}] | [{LNUM}[\.][0-9]*] EXPONENT_DNUM [+-]?[[{LNUM} | {DNUM}] [eE][+-]? {LNUM}]
Kích thước của float phụ thuộc vào nền tảng, mặc dù tối đa là ~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]
Cảnh báo
Số dấu phẩy động có độ chính xác hạn chế. Mặc dù nó phụ thuộc vào hệ thống, PHP thường sử dụng định dạng chính xác kép IEEE 754, định dạng 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 phi cơ bản có thể gây ra lỗi lớn hơn và tất nhiên, việc lan truyền lỗi phải được xem xét khi một số phép toán được gộp lại
Ngoài ra, các số hữu tỷ có thể biểu diễn chính xác dưới dạng số dấu phẩy động trong cơ số 10, chẳng hạn như 0. 1 hoặc 0. 7, không có biểu diễn chính xác dưới dạng số dấu phẩy động trong cơ sở 2, được sử dụng nội bộ, bất kể kích thước của phần định trị. Do đó, chúng không thể được chuyển đổi thành các đối tác nhị phân bên trong của chúng mà không làm giảm độ 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ì biểu diễn bên trong sẽ giống như 7. 9999999999999991118
Vì vậy, đừng bao giờ tin tưởng kết quả số thực cho chữ số cuối cùng và không so sánh trực tiếp các số có dấu phẩy động để lấy bình đẳng. Nếu cần độ chính xác cao hơn, các hàm toán học chính xác tùy ý và hàm gmp có sẵn
So sánh số float
Như đã lưu ý trong cảnh báo ở trên, việc kiểm tra các giá trị dấu phẩy động cho bằng nhau là một vấn đề, do cách chúng được biểu diễn bên trong. Tuy nhiên, có nhiều cách để so sánh các giá trị dấu phẩy động khắc phục những hạn chế này
Để kiểm tra sự bằng nhau của các giá trị dấu phẩy động, giới hạn trên của lỗi tương đối do làm tròn được sử dụng. Giá trị này được gọi là epsilon của máy hoặc làm tròn đơn vị và là sự khác biệt nhỏ nhất có thể chấp nhận được trong tính toán
$a và $b bằng 5 chữ số chính xác
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if[abs[$a-$b]
NaN
Một số phép toán số có thể dẫn đến một giá trị được biểu thị bằng hằng số NAN
. Kết quả này đại diện cho một giá trị không xác định hoặc không thể biểu diễn trong các phép tính dấu phẩy động. Bất kỳ so sánh lỏng lẻo hoặc nghiêm ngặt nào về giá trị này với bất kỳ giá trị nào khác, bao gồm cả chính nó, sẽ có kết quả là FALSE
Bởi vì NAN
đại diện cho bất kỳ số lượng giá trị khác nhau nào, nên không nên so sánh NAN
với các giá trị khác, kể cả chính nó và thay vào đó nên kiểm tra bằng cách sử dụng is_nan[]