Giới hạn hơn 15 chữ số trong excel

Liên hệ QC
Lần chỉnh sửa cuối:
Mấy hàm trên không đúng với số thập phân, nhờ các bạn sửa hộ.

12.15464965656566547982154654
15.145


Đây mới là phép nhân, cộng số nguyên dương thôi.
Khi nhân thập phân trên giấy thì bạn nhân như không có dấu rồi đếm có bao nhiêu chữ số sau dấu phẩy, đúng không? Thì làm tương tự thôi: nhân không dấu rồi chèn dấu vào kết quả.
Bài đã được tự động gộp:

Code dưới đây sẽ nhanh hơn của Bác @batman1 gần 6 lần với 1 triệu ký tự số.
Tôi có thi thố gì đâu?

Tôi chỉ muốn chứng minh điều tôi nói
3. Chưa chắc cái bạn tìm thấy là tối ưu.

Vì bạn thắc mắc
Chúng ta không nên bỏ nhiều chất xám vào cái người ta đã viết rồi,

Thế thôi chứ tôi cũng chả muốn bỏ thời gian cho cái mà chắc chắn tôi sẽ không cần, không dùng. Suy nghĩ chút gọi là thể dục bộ não.
 
Lần chỉnh sửa cuối:
Bổ sung:
Khi làm việc với số có thập phân thì NÊN thêm phần sau khi cộng trừ nhân chia xong, xét lại số để xoá đi những 0's đi sau dấu phẩy và số khác 0 cuối cùng. Nếu sau dấu phẩy toàn 0's thì cắt bỏ luôn dấu phẩy.
123.456700800 thì giảm lại còn 123.4567008
123.000000 thì còn 123
 
Lần chỉnh sửa cuối:
Sửa lại cho đúng chuẩn:
Code - Cộng hai số rất lớn bằng phương pháp phân đoạn:
-----------------------
Tham khảo lại bài #15 Để hiểu rõ hơn phương pháp tính số lớn.
Gồm có phương pháp Cộng, và nhân số lớn.

PHP:
Sub test_AddDecimal()
  Debug.Print AddDecimal("123.0000000000000000000000001", _
                          "123.9999999999999999999999999")
End Sub

Function AddDecimal$(Optional ByVal numA$ = "0", _
                     Optional ByVal numB$ = "0", _
                     Optional ByVal Point$ = ".")
  numA = Replace(Replace(numA, " ", ""), IIf(Point = ".", ",", "."), "")
  numB = Replace(Replace(numB, " ", ""), IIf(Point = ".", ",", "."), "")
  Dim MxStr%, I&, cAdd$, em%, max&, T1&, T2&, Rep1$, Rep2$, Tmp$
  Dim Ctn$(1 To 6), LCtn&(1 To 6)
  T1 = InStr(numA, Point): T2 = InStr(numB, Point)
  Ctn(1) = Left(numA, IIf(T1 = 0, Len(numA), T1 - 1)):  LCtn(1) = Len(Ctn(1))
  Ctn(2) = Left(numB, IIf(T2 = 0, Len(numB), T2 - 1)):  LCtn(2) = Len(Ctn(2))
  Ctn(3) = Right(numA, IIf(T1 = 0, 0, Len(numA) - T1)): LCtn(3) = Len(Ctn(3))
  Ctn(4) = Right(numB, IIf(T2 = 0, 0, Len(numB) - T2)): LCtn(4) = Len(Ctn(4))
  LCtn(5) = IIf(LCtn(1) > LCtn(2), LCtn(1), LCtn(2))
  Ctn(1) = String(LCtn(5) - LCtn(1), "0") & Ctn(1)
  Ctn(2) = String(LCtn(5) - LCtn(2), "0") & Ctn(2)
  LCtn(6) = IIf(LCtn(3) > LCtn(4), LCtn(3), LCtn(4))
  Ctn(3) = Ctn(3) & String(LCtn(6) - LCtn(3), "0") 
  Ctn(4) = Ctn(4) & String(LCtn(6) - LCtn(4), "0")
  If LCtn(6) > 0 Then
    numA = Ctn(3): numB = Ctn(4): max = LCtn(6): GoSub Add
    Rep1 = numA
  End If
  numA = Ctn(1): numB = Ctn(2): max = LCtn(5): GoSub Add
  Rep2 = IIf(em > 0, em, "") & numA
  AddDecimal = Rep2
  If LCtn(6) > 0 Then
    AddDecimal = AddDecimal & IIf(Rep1 > "0", Point & Rep1, "")
  End If
Exit Function
Add:
  MxStr = 28
  For I = max To 1 Step -1
    If I < MxStr Then
      MxStr = I: I = 1
    Else
      I = I - MxStr + 1
    End If
    cAdd = CDec(Mid(numA, I, MxStr)) + CDec(Mid(numB, I, MxStr)) + em
    em = 0: If Len(cAdd) > MxStr Then em = Left(cAdd, 1)
    Tmp = Right(cAdd, MxStr)
    If LCtn(6) > 0 And Rep1 = vbNullString Then
      cAdd = CDec("." & Tmp)
      If Len(cAdd) = 1 Then
        LCtn(6) = LCtn(6) - MxStr
        numA = Left(numA, LCtn(6))
      Else
        LCtn(6) = LCtn(6) - Len("xx" & Tmp) + Len(cAdd)
        numA = Left(numA, LCtn(6))
        Mid(numA, I, MxStr) = Tmp
      End If
    Else
      Mid(numA, I, MxStr) = Tmp
    End If
  Next I
Return
End Function
 
Lần chỉnh sửa cuối:
Em cảm ơn các anh chị nhiều. Em sẽ ngâm cứu dần ạ.

Mục đích của em chỉ là tính lũy thừa mũ lớn để test thi siêu trí tuệ có khó không thôi ạ
 
mình xem siêu trí tuệ việt nam, muốn làm vài số dài hơn 66 số để khai căn như gia hưng tính nhẩm, mà excel ko hiện ra 66 số. ví dụ =power(25,43)= hiển thị đủ 66 số. các bác có cách nào hiển thị hết ko, nhìn các bác code trên mà khó quá
 
mình xem siêu trí tuệ việt nam, muốn làm vài số dài hơn 66 số để khai căn như gia hưng tính nhẩm, mà excel ko hiện ra 66 số. ví dụ =power(25,43)= hiển thị đủ 66 số. các bác có cách nào hiển thị hết ko, nhìn các bác code trên mà khó quá
Những bài toán như thế này sẽ hiếm gặp trên thực tiển nhưng lại nhang nhãng trên các sách giáo khoa Việt, kỳ lạ của nền GD VN là chỗ này!
 
Những bài toán như thế này sẽ hiếm gặp trên thực tiển nhưng lại nhang nhãng trên các sách giáo khoa Việt, kỳ lạ của nền GD VN là chỗ này!
Hầu hết những chương trong chương trình Toán Đại Số và Giải Tích lớp 11-12 đều "sẽ hiếm gặp trên thực tiễn".
Nếu không muốn kỳ lạ thì bỏ quách hai môn này cho rồi.

Định nghĩa thế nào là "thực tiễn"? Có những điều tôi học qua trong Toán, không bao giờ thấy lại ngoài đời, nhưng nó là căn bản để suy luận cho một số điều khác.
 
(/ới 66 số chữ số thập phân thì chỉ trong ngành hàng không vũ trụ xài mà thôi; Lúc đó GPE.COM là đồ bỏ đi so với iêu cầu này

Đó là í nghĩa thực tiển của bài toán cụ thể này, theo í mình! :D@
 
Thiếu giống gì con số không thực tiễn vẫn được Toán dùng đến. Nên nhớ rằng chính trường phaios Pythagoras đã đưa ra luận cứ tất cả các số đều hữu tỷ. Rồi cũng chính từ định lý Pythagoras mà có ngừoi tìm ra số vô tỷ.

Siêu trí tuệ chỉ nằm ở chỗ muốn dùng Excel để làm việc với con số dài sọc. Dùng cây thước học trò để đo chiều cao cột cờ (*).
Vấn đề "cái gì cũng nghĩ tới Excel" đâu phải là lỗi của giáo dục.

Vả lại, nếu tôi nhớ không lầm thì ở GPE này cũng có bài nói về "số rất lớn" (large numbers) rồi mà.

(*) thật ra là làm được. Khoảng đầu khoá học năm 1974 (tháng 7), nó là đề bài lễ nhập môn của khoá Kỹ Sư Phú Thọ (bây giờ là BK tpHCM) năm ấy.
 
mình xem siêu trí tuệ việt nam, muốn làm vài số dài hơn 66 số để khai căn như gia hưng tính nhẩm, mà excel ko hiện ra 66 số. ví dụ =power(25,43)= hiển thị đủ 66 số. các bác có cách nào hiển thị hết ko, nhìn các bác code trên mà khó quá
Có cách tính nhẩm, vậy học cách tính nhé, sang diễn đàn khác thì mới chuẩn
 
Excel chỉ tính số có 15 chữ số thôi, vượt quá 15 chữ số thì nó tự chuyển về 0. Nên không chuyển từ cột B để có kết quả như cột A được.
Topic này dẫn em đến Topic hoành tráng hơn về việc này:

Anh cho em hỏi, tại sao có việc này và tại sao Excel giới hạn ở con số 15 vậy anh, sao không là 20 hay 30? Topic trên có rất nhiều cách giải quyết nhưng cũng không đề cập đến nguyên nhân.
 
Anh cho em hỏi, tại sao có việc này và tại sao Excel giới hạn ở con số 15 vậy anh, sao không là 20 hay 30? Topic trên có rất nhiều cách giải quyết nhưng cũng không đề cập đến nguyên nhân.
Excel nói: Khi tài khoản ngân hàng của bạn có trên 15 con số thì những đồng lẻ phía sau sẽ không quan trọng với bạn nữa
 
Lần chỉnh sửa cuối:
Excel nói: Khi tài khoản ngân hàng của bạn có trên 15 con số thì những đồng lẻ phía sau sẽ không quan trọng với bạn nữa
Nghiền ngẫm suy nghĩ thấy đúng nha! :D

10^15 đọc là 1 triệu tỉ đúng không? Tui cũng đã từng đọc đến những con số tỉ tỉ rồi í. :D
 
@xuongrongdat @Hoàng Tuấn 868
Khi cho máy tính xử lý tính toán thì số được chuyển về dạng Binary được tính toán trực tiếp trong CPU, lúc này tốc độ tính toán là nhanh nhất.
Microsoft chọn 15 con số liên quan đến Bộ nhớ đệm và xử lý CPU, số này nhỏ hơn tính toán kiểu 8 bytes, ở đơn vị này số nằm trong giới hạn số con người sử dụng, và tốc độ xử lý là tối ưu nhất, nếu chọn kiểu lớn hơn thì sẽ tiêu tốn tài nguyên. Chính vì vậy Microsoft chọn phương án tối ưu nhất.

Giả sử trang tính có 10000 ô tính cùng lúc nếu sử dụng nhiều hơn 8 bytes, thì hao tổn tài nguyên là rất lớn.

Bạn sẽ sớm mua CPU mới, có khi cả Máy tính mới nếu mức tiêu hao tài nguyên cao.

Nhất là trong thời đại máy tính chỉ có bộ nhớ 32bit, thì 15 con số là phù hợp nhất và tương thích cả 32bit và 64bit.
----------------------------------------------------------


Chính vì hao tổn tài nguyên mà khi lập trình VBA những biến lớn Variant, Currency ta hạn chế sử dụng
 
Anh cho em hỏi, tại sao có việc này và tại sao Excel giới hạn ở con số 15 vậy anh, sao không là 20 hay 30? Topic trên có rất nhiều cách giải quyết nhưng cũng không đề cập đến nguyên nhân.
Lưu trữ và tính toán trên giấy các số thực dấu phẩy động rất khác nhau. Trên giấy có thể đánh dấu phẩy rồi nhập hàng nghìn chữ số sau dấu phẩy. Trên máy nếu muốn lưu và tính toán vd. với số sau dấu phẩy cố định nhưng lớn quãng 1000 chữ số sau dấu phẩy thì sẽ phải cho ra đời specification thích hợp, và dùng tài nguyên cực cực lớn để biểu diễn số (không phải dùng vài chục bit mà dùng hằng hà sa số bit). Chính vì thế trên máy tính thường thì các số được biểu diễn với độ chính xác nhất định thôi.

Về 15 chữ số sau dấu phẩy thì nguyên nhân do Excel dùng specification IEEE 754 để lưu trữ và tính toán các số thực dấu phẩy động (floating-point numbers).

excel.jpg

Về IEEE 754 có thể đọc ở rất nhiều nơi, vd. tại
--------------
Nhờ giúp đỡ.
Nếu bác VetMini đọc chủ đề này và có thể giúp tôi thì xin cảm ơn bác nhiều. Tôi muốn biết các nghĩa của từ specification trong tiếng Việt. Trong mọi lĩnh vực có thể có, vd. kỹ thuật, pháp lý v...v. Nếu các bạn khác biết thì tôi cũng xin giúp đỡ.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom