2013-08-06 37 views
12

Toán tử mô đun được cho là hiển thị số dư còn lại. Thích cho echo(34%100) kết quả đầu ra 34. Nhưng tại sao tôi nhận được một lỗi "Division by zero" cho mã này echo(34%4294967296)Phân chia bằng lỗi 0 khi sử dụng mô đun

+1

sử dụng 'fmod echo (34 tuổi, 4294967296); 'in' 34' –

+0

sử dụng 'tiếng vang bcmod ('34' , '4294967296');' [in' 34'] (http://3v4l.org/5lYTP) –

+0

cả hai công trình fmod và bcmod, bây giờ tôi đang bối rối cái nào để sử dụng. Tôi đang xử lý số lượng lớn, chức năng nào bạn đề nghị, bcmod hoặc fmod? –

Trả lời

16

42949672962^32 và không thể được biểu diễn dưới dạng số 32 bit - nó kết thúc tốt đẹp trở lại 0. Nếu bạn sử dụng phiên bản 64-bit của PHP, nó có thể làm việc.

Bạn có thể sử dụng mô đun điểm động fmod để nhận được những gì bạn muốn mà không bị tràn.

+0

vâng, tôi giải thích rằng trong http://computer-programming-forum.com/53-perl/f2805415f84c54e1.htm, nhưng cách khắc phục lỗi này? có cách nào khác hay không? –

+2

PHP 64 bit chưa hỗ trợ các số nguyên 64 bit trên Windows, do đó, ngay cả điều đó cũng không giúp ích gì. – garrettmurray

+0

Tôi đã thêm liên kết vào fmod có thể giúp bạn – mvp

7

https://bugs.php.net/bug.php?id=51731

2^31 is the largest integer you can get on Windows.

Nếu bạn vẫn muốn để mod số lượng lớn, sử dụng bcmod.

+0

vì vậy, sự khác biệt giữa bcmod và fmod là gì? –

+0

Fmod phôi cả hai bên để nổi, bcmod sử dụng một "số chính xác tùy ý" (đó là các kiểu số riêng). –

+0

@NeilNeyman ah, vì vậy fmod cho thấy giá trị chính xác trong khi bcmod làm tròn giá trị? –

2

Có rất nhiều báo cáo về mod nhận được nhiều điều thú vị với số nguyên lớn trong php. Có thể là một tràn trong tính toán hoặc thậm chí trong số đó chính nó sẽ cung cấp cho bạn lỗi. Tốt nhất là sử dụng một thư viện số lớn cho điều đó. Kiểm tra gmp hoặc bcmath.

0

Tôi đã tìm thấy câu hỏi này đang tìm kiếm "chia cho số không lỗi khi sử dụng mô đun", nhưng lý do tại sao lại khác.

Modulus (nhà điều hành %) sẽ không hoạt động khi từ chối nhỏ hơn 1. sử dụng fmod() giải quyết vấn đề.

Ví dụ:

$num = 5.1; 
$den = .25; 

echo ($num % $den); 
// Outputs Warning: Division by zero 
echo fmod($num, $den); 
// Outputs 0.1 

$num = 5.1; 
$den = 1; 

echo ($num % $den); 
// Outputs 0, which is incorrect 
echo fmod($num, $den); 
// Outputs 0.1, which is correct 
Các vấn đề liên quan