Cùng 1 phép toán, 2 ngôn ngữ cho 2 kết quả khác nhau

Python -> kết quả 48:

print 64 - ((8 - 56) % 64) 

C++, Java -> kết quả 112:

cout << 64 - ((8 - 56) % 64);

Theo m hiểu theo toán thì thằng c++ đúng? Ko biết ông python tính kiểu gì ra 48.

1 Like

Giả sử:

  • a: số bị chia (dividend)
  • n: số chia (divisor)
  • r: số dư (remainder)

Sau khi loại bớt đi những thứ rườm rà, thì xem xét biểu thức sau: r = -48 % 64, trong đó:

  • a = -48
  • n = 64
  • r là số dư

Công thức tính a % n đối với Java:

trunc() lấy phần nguyên của số và giữ dấu của số:

  • trunc(0.5) = 0
  • trunc(1.5) = 1
  • trunc(-0.5) = 0
  • truc(-1.5) = -1

Khi đó

  • r = -48 - 64 * trunc(-48 / 64)
  • r = -48 - 64 * trunc(-0.75)
  • r = -48 - 64 * 0
  • r = -48

Công thức tính a % n đối với Python:

  • ⎣x⎦ là hàm số R -> N, là số nguyên lớn nhất nhỏ hơn x

  • |x| là giá trị tuyệt đối của x.

Khi đó:

Tham khảo: Modulo Operation

6 Likes

Nó tựa tựa kiểu lấy căn bậc hai ấy :smiley: có hai nghiệm :< gọi là principal branch.

Ta có thể lấy modulo là âm hay dương đều được, miễn là trị tuyệt đối nhỏ hơn số chia. Lấy số âm có khi dễ tính tay hơn.

4 Likes

-48 = 64*(-1) + 16
vậy nên -48%64 = 16 => kết quả cuối cùng phải là 48

mà thật ra là cùng 1 ngôn ngữ có khi còn ra kết quả khác nữa chứ huống chi là khác ngôn ngữ :))

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?