Hàm mod trả về số chia nếu chia chẵn.

  • Thread starter Thread starter cantl
  • Ngày gửi Ngày gửi
Liên hệ QC
Mong muốn của bác là chuyển dịch giá trị, không phải nghịch đảo như phép chia dư cho 2
Không phải mong muốn của tôi mà là yêu cầu của chủ đề này không chỉ có số 2. Bài 14 tôi hỏi rất rõ ràng "số chia bằng 3" và bạn khẳng định "Có thể nghịch đảo bất kì một số chia dư trừ số 0" (bài 15), nên tôi mới lấy ra thí dụ ở bài 17

HeSanbi đã viết:
Công thức bạn cho ở bài 15 cũng sai với ngay cả số chia bằng 2, tới bài 19 mới đúng
1696432703332.png
 
Không phải mong muốn của tôi mà là yêu cầu của chủ đề này. Bài 14 tôi hỏi rất rõ ràng "số chia bằng 3" và bạn khẳng định "Có thể nghịch đảo bất kì một số chia dư trừ số 0" (bài 15), nên tôi mới lấy ra thí dụ ở bài 17
#19 tôi đã giải thích, bác đã kiểm thử nhầm thì lỗi do Bác đọc bài viết.

Nếu VBA là: -4 mod 2 + 2
Thì Excel: Mod(4,-2) + 2

Phương pháp trên tôi chỉ nghịch đảo giá trị trả về, khi áp dụng cần tuân theo nguyên tắc của hàm Excel.

Hàm Mod Excel dùng dấu của số chia dư để trả về giá trị, nên khác hoàn toàn với toán tử Mod VBA
 
Thôi toi rồi các bác ạ. Giờ phép chia số âm 3/-2 và -3/2 thì số dư nào đúng như ảnh sau. Sao giống như lỗ hổng của toán học ấy.
Em loạn rồi.
 

File đính kèm

  • Screenshot_20231004-221840_Excel.jpg
    Screenshot_20231004-221840_Excel.jpg
    37.7 KB · Đọc: 13
Công thức bạn cho ở bài 15 cũng sai với ngay cả số chia bằng 2, tới bài 19 mới đúng
Nếu bác đọc kĩ bài #15 thì sẽ khác
Bài đã được tự động gộp:

Thôi toi rồi các bác ạ. Giờ phép chia số âm 3/-2 và -3/2 thì số dư nào đúng như ảnh sau. Sao giống như lỗ hổng của toán học ấy.
Em loạn rồi.
Hãy "Bình tĩnh". Mod Excel dùng dấu số chia dư Divisor làm dấu trả kết quả nha bác.
 
#19 tôi đã giải thích, bác đã kiểm thử nhầm thì lỗi do Bác đọc bài viết.
Bài 19 mới viết thì sau bài đó mới gọi là nhầm. Còn bài 16, 17 nói về bài 15 thì không gọi là nhầm.
Bạn nghịch đảo số bị chia, mà toàn nói về số chia. Tôi hỏi số chia, bạn vẫn khẳng định số chia.
Ngoài ra, chủ đề hỏi trong box công thức, bạn lại trả lời bằng hàm VBA mà không báo trước.
 
Mod excel thì link MS trên tớ hiểu nó chọn dấu rồi, nhưng thực tế thì ảnh bài 23, kết quả nào đúng về toán học nhỉ? :wallbash::wallbash::wallbash:
Hàm MOD của Excel họ đã định nghĩa để người dùng áp dụng theo nguyên tắc của họ đặc ra.
Hàm thì được định nghĩa. Còn toán tử thì mới tuân theo nguyên tắc toán học.
 
Thôi toi rồi các bác ạ. Giờ phép chia số âm 3/-2 và -3/2 thì số dư nào đúng như ảnh sau. Sao giống như lỗ hổng của toán học ấy.
Em loạn rồi.
Đọc định nghĩa hàm Mod của Excel do MS viết:

1696434574941.png

Với bài toán chia -3 chia 2, thương số là -1, dư 1 vì -3 -(2 * int(-3/2)) = 1. Lưu ý dư 1 cùng dấu với số bị chia 2

Với bài toán 3 chia -2, thương số là -1, dư -1 vì 3 - (-2) * int(3/(-2)) = -1. Lưu ý dư -1 cùng dấu với số bị chia -2

Tóm lại, đúng với toán hay không không cần biết, phải đúng với định nghĩa mod của MS.
 
Theo toán thì:
MOD(a,b) = a-b*QUOTIENT(a,b)

Nhưng Microsoft định nghĩa hơi khác. Họ định nghĩa rằng:
MOD(a,b) = a-b*INT(a/b)

Tôi chỉ nói hàm bảng tính. VBA vốn là của Access, có một số trường hợp Access làm việc khác với Excel.
 
Hay quá, hàm mod em dùng bao năm mà không hiểu gì về nó hết cả. :D :D :D

Cảm ơn các bác nhé!!!
 
Thớt này đang rỗi, chắc vừa bị bồ đá, cho nên đi tim những chuyện rắc rối cho nó đỡ buồn, sinh nghĩ quẩn, tự tử hay uông thuốc kíck thích gì đó.

Trong định nghĩa của MS về Mod
Mod(n, d) = n - d * Int(n / d)
May mà chưa thấy vấn đề với Int, nếu thấy thì tự tử chắc luôn.
 
Căn bản con toán tính chỉ số mảng 1 chiều thành 2 chiều.
Bác giải thích chi tiết về
...
cho em hiểu với ạ.
mảng a1(1 To 110) đổi thành a2(1 To 6, 1 To 20)
a2((i - 1) \ UBound(a2, 2) + 1, ((i - 1) Mod UBound(a2, 2)) + 1) = a1(i)
Con toán trên tính phần tử tương ứng (dòng và cột) để chép a1(i) qua a2(?, ?)

Thử code này thì biết
Sub t()
Dim a1(1 To 110)
Dim a2(1 To 6, 1 To 20)
For i = 1 To UBound(a1)
a2((i - 1) \ UBound(a2, 2) + 1, ((i - 1) Mod UBound(a2, 2)) + 1) = a1(i)
' tính dòng thì chia, tính cột thì mod
Debug.Print i, (i + -1) \ UBound(a2, 2) + 1, ((i - 1) Mod UBound(a2, 2)) + 1
Next i
End Sub
 
Một trong những cái sai lầm của người "tự học" môn giải tích số (numerical analysis), môn này bao gồm cả lập trình, là họ nghĩ rằng chỉ cần học code, biết sử dụng abc, xyz,... là đủ.
Tất cả (tôi nói tất cả, không phải chỉ đa số) những người giỏi lập trình đều biết cách đặt dữ liệu để test kiến thức của mình.
Ví dụ thắc mắc về hàm MOD thì họ tự dựng được một bảng để test xem mình hiểu hàm này đến mức nào. Nếu về sau này thấy rằng có sự lạ của MOD mà mình trước đó chưa biết thì chẳng những họ cập nhật kiến thức về cái sự lạ ấy, mà còn phải tự đặt câu hỏi "tại sao test của mình thiếu phần ấy?"

Nếu bạn đặt đủ dữ liệu để test thì có thể sẽ hiểu tại sao MS định nghĩa hàm MOD như thế.
 
Web KT

Bài viết mới nhất

Back
Top Bottom