Tại sao số dấu phẩy động được sử dụng thường xuyên trong Khoa học / Kỹ thuật?


33

Trong khi điều tra tính chính xác của các số dấu phẩy động, tôi đã thấy ở một vài nơi một tuyên bố tương tự như

" float và double là ( được thiết kế cho / sử dụng thường xuyên trong ) tính toán kỹ thuật và khoa học "

Theo hiểu biết của tôi, sức mạnh của phao và đôi là lượng bộ nhớ họ sử dụng cho độ chính xác (tốt, nhưng không hoàn hảo) của họ.

Tôi cảm thấy mình gần như hiểu được câu trả lời này

"số dấu phẩy động cho phép bạn mô hình số lượng liên tục"

Tôi vẫn không tin tôi hiểu. Kỹ thuật và Khoa học đều có vẻ giống như các lĩnh vực mà bạn muốn có kết quả chính xác từ các tính toán của mình, theo hiểu biết của tôi, các điểm nổi không cho. Chính xác, tôi cũng không chắc mình tuân theo "số lượng liên tục" là gì.

Ai đó có thể mở rộng về lời giải thích này và có thể đưa ra một ví dụ?



47
Engineering and Science both sound like fields where you would want precise results from your calculations, which, from my understanding, floating points do not give.Trong cả Khoa học và Kỹ thuật, bạn chỉ quan tâm đến độ chính xác đến một điểm nhất định. Sử dụng độ chính xác vô hạn cho mọi tính toán thường tốn kém không cần thiết. Điều khiến điểm nổi ngoài điểm cố định là bạn không phải cam kết với một số vị trí thập phân nhất định - bạn có thể có số lượng thực sự nhỏ với nhiều số thập phân hoặc số lượng thực sự lớn với độ chính xác hạn chế.
Doval

24
Để thêm vào các điểm đã nêu ở trên, bạn không chỉ không quan tâm đến độ chính xác vượt quá một điểm nhất định, bạn không thể nhận được kết quả chính xác tùy ý vì nhiều đầu vào của bạn là các đại lượng được đo có một số lỗi cố hữu.

2
Nó cũng chỉ ra rằng nó không phải là một điều chắc chắn rằng các lỗi làm tròn sẽ tiếp tục tích lũy. Nó phụ thuộc vào những gì bạn đang làm và cách bạn đang làm điều đó; có cả một lĩnh vực dành riêng cho điều đó.
Doval

10
Điểm nổi không phải là "độ chính xác ngẫu nhiên", các lỗi cho các hoạt động khác nhau có thể dự đoán và được biết đến và các lỗi cho thuật toán có thể được xử lý. Nếu chúng đủ thấp (và đặc biệt nếu các lỗi ngược của bạn nhỏ hơn độ không đảm bảo trong các biến đầu vào của bạn) thì bạn có thể chắc chắn rằng kết quả của bạn là tốt (hoặc ít nhất là bất kỳ vấn đề nào xảy ra với chúng không phải do nổi - lỗi điểm).
hobbs

Câu trả lời:


77

Tính toán trong khoa học và kỹ thuật đòi hỏi sự đánh đổi về độ chính xác, phạm vi và tốc độ. Số học điểm cố định cung cấp độ chính xác và tốc độ khá, nhưng nó hy sinh phạm vi. BigNum, các thư viện chính xác tùy ý, giành chiến thắng về phạm vi và độ chính xác, nhưng thua về tốc độ.

Mấu chốt của vấn đề là hầu hết các tính toán khoa học và kỹ thuật cần tốc độ cao, và phạm vi rất lớn, nhưng có nhu cầu tương đối khiêm tốn về độ chính xác. Hằng số vật lý được xác định rõ nhất chỉ có khoảng 13 chữ số và nhiều giá trị được biết với độ chắc chắn thấp hơn nhiều. Có hơn 13 chữ số chính xác trên máy tính sẽ không giúp được điều đó. Con ruồi trong thuốc mỡ là các chuỗi hoạt động của dấu phẩy động có thể dần mất đi độ chính xác. Bánh mì và bơ của phân tích số đang tìm ra vấn đề nào đặc biệt dễ mắc phải điều này, và tìm ra những cách thông minh để sắp xếp lại chuỗi hoạt động để giảm bớt vấn đề.

Một ngoại lệ cho điều này là lý thuyết số trong toán học cần thực hiện các phép toán số học trên các số có hàng triệu chữ số nhưng với độ chính xác tuyệt đối. Các nhà lý thuyết số số thường sử dụng các thư viện BigNum và họ đưa ra các tính toán của họ mất nhiều thời gian.


2
Câu trả lời tốt. Mặc dù các chức năng cơ bản có thể hoàn toàn liên tục, đòi hỏi độ chính xác hoàn hảo để mô hình chính xác, nhưng thực tế là mọi thứ trong khoa học và kỹ thuật là gần đúng. Chúng tôi muốn có những xấp xỉ hữu ích, gần đúng và hoàn thành một cái gì đó hơn độ chính xác vô hạn, mà chúng tôi sẽ chờ đợi mãi mãi để nhiều hoạt động hoàn thành.
Jonathan Eunice

4
@JonathanEunice Bạn không thể mô hình chính xác thực tế. Đầu vào cho mô hình xuất phát từ các phép đo và có lẽ bạn sẽ không bao giờ có thể đo lường mọi thứ chính xác đến mức một số thực bản địa trong máy tính / phần mềm hiện đại (tại thời điểm đó) sẽ hạn chế nó. Nói cách khác, bạn có thể có mô hình, phần mềm hoặc toán học hoàn hảo, điều đó không thành vấn đề. Ví dụ: Tính thể tích của một hộp. a*b*ccông cụ dễ dàng, tuy nhiên, bạn cần đo các kích thước mà bạn không thể thực hiện một cách chắc chắn tuyệt đối, do đó bạn không thực sự cần độ chính xác vô hạn của mọi cách tính, chỉ đủ để bị ràng buộc bởi lỗi đo lường.
luk32

2
@ luk32 Chúng tôi đồng ý dữ dội về hầu hết các điểm đó. Người ta có thể mô hình chính xác một số thứ (thể tích của một hình cầu, ví dụ), nhưng không bao giờ có thể đo chính xác. Và thực tế không bao giờ hoàn toàn phù hợp với một mô hình hoàn hảo. Tốt hơn để có được một chút không chính xác, các giá trị / mô hình hữu ích hơn là chờ đợi các phép đo hoặc tính toán hoàn hảo - thứ gì đó sẽ luôn luôn là một bước.
Jonathan Eunice

2
Điểm mấu chốt của vấn đề là hầu hết các tính toán khoa học và kỹ thuật đều cần tốc độ cao và phạm vi rất lớn Nếu tôi cho bạn thời gian dài, bạn vẫn không thể tính toán chính xác vì các thuật toán để tính toán chính xác vẫn chưa được biết đến. Và trước hết, chúng ta thậm chí không thể đại diện chính xác cho các con số. Đây chỉ là một vấn đề chúng tôi không biết làm thế nào để giải quyết, không nhanh cũng không chậm.
Michael Le Barbier Grünewald

@ MichaelGrünewald, chúng tôi không thể biểu diễn chính xác các số thực, nhưng chúng tôi có thể giải quyết các vấn đề gần đúng đến mức chúng tôi có thể xây dựng các cấu trúc cao vài nghìn feet, xác định gen trong DNA và gặp một vệ tinh bằng sao chổi sau hai năm trong không gian. Để diễn giải Randy Newman, điều đó có thể không chính xác, nhưng tất cả đều ổn. Trong thực tế, chúng ta có thể biểu diễn các lý do chính xác bằng cách sử dụng các thư viện chính xác tùy ý (tùy thuộc vào giới hạn của bộ nhớ).
Charles E. Grant

30

Bạn đề xuất phương án nào?

Số lượng liên tục được biểu diễn bằng số thực trong toán học. Không có loại dữ liệu nào có thể mã hóa mọi số thực có thể (vì số thực không thể đếm được), vì vậy điều đó có nghĩa là chúng ta chỉ có thể chọn một tập hợp con của những số thực mà chúng ta quan tâm nhất.

  • Bạn có thể chọn tất cả các số thực tính toán, tương tự như các hệ thống đại số máy tính (CAS) làm. Vấn đề là nó trở nên không khả thi khi cây biểu hiện của bạn ngày càng lớn hơn. Nó cũng rất chậm: hãy thử giải một hệ thống phương trình vi phân khổng lồ trong Mathicala một cách tượng trưng và so sánh với một số cách thực hiện dựa trên dấu phẩy động khác và bạn sẽ thấy sự khác biệt đáng kể về tốc độ. Ngoài ra, như Jörg W Mittag và kasperd đã chỉ ra: bạn thậm chí không có các hoạt động so sánh / bình đẳng có thể quyết định.

  • Bạn có thể sử dụng các số hữu tỷ chính xác, nhưng điều đó không thực sự hiệu quả đối với nhiều ứng dụng vì bạn cần tính căn bậc hai hoặc cosin hoặc logarit, v.v. Ngoài ra, cũng có xu hướng các lý do trở nên ngày càng phức tạp và do đó cần nhiều không gian hơn để lưu trữ và thời gian để xử lý khi bạn thực hiện ngày càng nhiều tính toán trên chúng.

  • Bạn cũng có thể sử dụng các số thập phân có độ chính xác tùy ý, nhưng ngay cả những thứ đơn giản như phép chia sẽ không hoạt động vì bạn nhận được các chữ số lặp lại vô hạn. Bạn cũng có thể gặp phải vấn đề tăng độ phức tạp khi bạn thực hiện tương tự như số hữu tỷ, mặc dù ở mức độ thấp hơn.

Vì vậy, bạn sẽ bị buộc phải sử dụng xấp xỉ tại một số điểm, trong trường hợp đó chính xác là nơi các số dấu phẩy động làm tốt nhất. Các số dấu phẩy động cũng có chiều rộng cố định (không giống như tất cả 3 loại dữ liệu khác được đề cập trước đó), điều này ngăn sự gia tăng độ phức tạp khi bạn thực hiện ngày càng nhiều phép tính trên chúng.


1
Một trong những câu trả lời hay nhất, tôi đã bỏ qua nó trước khi viết của tôi.
Michael Le Barbier Grünewald

8
Thêm vào đó, có một thực tế hơi bất tiện mà bạn thậm chí không thể biết nếu hai thực tế tính toán có bằng nhau hay không.
Jörg W Mittag

1
Sẽ không sử dụng tất cả các thực tế tính toán có thể gặp vấn đề với so sánh? Tôi khá chắc chắn rằng bạn không thể so sánh các thực tế tính toán tùy ý mà không giải quyết vấn đề tạm dừng.
kasperd

@kasperd: Tôi nghĩ rằng điều đó sẽ phụ thuộc vào một số biện pháp dựa trên những hoạt động nào được phép sử dụng trong tính toán, mặc dù tôi không chắc chắn một tập hợp các loại tính toán có thể có và vẫn đảm bảo rằng bất kỳ hai kết quả tùy ý nào có thể được sản xuất trong một số lượng hữu hạn các hoạt động có thể được so sánh trong thời gian giới hạn. Các loại đại số gần như chắc chắn sẽ đáp ứng tiêu chí đó, nhưng tôi không biết liệu các hàm ln (x) và exp (x) có thể được thêm vào hay không và vẫn đáp ứng nó.
supercat

Bạn có thể hỗ trợ số học chính xác tùy ý (cộng, nhân, trừ, chia), bất hợp lý (như √2), siêu việt nổi tiếng (như Pi và e), hàm trig, v.v ... bằng cách sử dụng phân số tiếp tục. Xem thuật toán của Gosper trong HAKMEM. Khi kết thúc, bạn có thể thực hiện đánh giá lười biếng để có được xấp xỉ dấu phẩy động với độ chính xác mong muốn.
Paul Chernoch

14

Đề xuất của bạn về khoa học là sai, Kỹ thuật và Khoa học khác sau đó Toán học không hoạt động với kết quả chính xác chính xác. Chúng hoạt động với hệ số chính xác được tích hợp vào số lượng chữ số bạn hiển thị.

Thuật ngữ chính bạn cần hiểu ở đây là: số liệu quan trọng . Các số liệu quan trọng của một số là những chữ số mang ý nghĩa đóng góp cho độ chính xác của nó.

Điều đó về cơ bản có nghĩa là nếu tôi nói rằng một cái gì đó dài 12 cm, thì nó thực sự có thể dài khoảng 11,5 đến 12,5 cm. Tuy nhiên, nếu tôi nói rằng một cái gì đó dài 12,00 cm thì nó có thể dài từ 11.995 đến 12.005 cm.

Cũng giống như một minh họa, nếu bạn lấy một thước dây và đo phòng khách của bạn. Mặc dù bạn có thể thấy rằng nó rộng 6 mét 25 cm, bạn biết rằng phép đo băng của bạn không đủ chính xác để nói bất cứ điều gì về độ chính xác đến từng milimet hoặc độ chính xác nano mét.


@leftaroundabout bạn có nghĩa là toán học (như trong toán học) không phải là khoa học? Trong cuốn sách của tôi nó là.
Pieter B

2
@PieterB: Toán học không phải là Khoa học. Đó là triết lý. Khoa học nó là hành động hình thành một sự hiểu biết về thế giới vật chất của chúng ta. Triết học là hành động hiểu cách các ý tưởng hoạt động trong một thế giới lý tưởng.
slebetman

Tôi nghĩ khoa học thường thích làm việc với phạm vi tin cậy rõ ràng hơn là con số đáng kể.
Taemyr

@slebetman Bên cạnh đó, nó không liên quan gì đến quan điểm của tôi trong bài viết của tôi, nếu toán học là một môn khoa học hay không, tôi không thể giúp bỏ một câu trích dẫn: Tự nhiên là toán học bẩm sinh, và cô ấy nói với chúng tôi về toán học. Chúng tôi chỉ phải lắng nghe. Bởi vì thiên nhiên là toán học, bất kỳ khoa học nào có ý định mô tả thiên nhiên đều hoàn toàn phụ thuộc vào toán học. Không thể quá coi trọng điểm này, và đó là lý do Carl Friedrich Gauss gọi toán học là "nữ hoàng của các ngành khoa học".
Pieter B

Đó là trích dẫn từ đây . Một bài đọc tốt và nhiều điều để thảo luận, nhưng không phải ở đây vì thực sự nó không liên quan gì đến bài viết của bạn hoặc câu hỏi này.
leftaroundabout

7

Lưu ý rằng số dấu phẩy động về cơ bản giống như ký hiệu khoa họckỹ thuật , cách tiêu chuẩn để con người viết số trong toán học và khoa học. Trong các lĩnh vực này, không có nhu cầu lớn về độ chính xác cực cao, nhưng thường có một phạm vi rất lớn .

Để chọn một ví dụ ngẫu nhiên từ bài tập về nhà vật lý của tôi, gần đây tôi đã phải làm việc với khối lượng của một electron, tương đương 9,11 * 10 ^ -31 kg. Tôi không quan tâm nhiều về độ chính xác; nó có thể dễ dàng là 9,12 cho tất cả những gì tôi quan tâm. Nhưng tôi quan tâm đến số mũ và không muốn phải viết ra 0,0000 ... 911 kg, vì vậy tôi sử dụng ký hiệu khoa học.

Lý luận tương tự áp dụng trong điện toán khoa học và kỹ thuật: có một phạm vi rộng lớn, nhưng chúng tôi không muốn phải lưu trữ và làm việc với số lượng rất lớn, vì vậy chúng tôi lưu trữ một giá trị chuẩn hóa và số mũ, nhỏ hơn và nhanh hơn để làm việc.


6

Các số dấu phẩy động cũng có một số tính chất cho vay tốt để tính toán các loại kết quả khoa học nhất định. Đáng chú ý nhất, độ chính xác tỷ lệ nghịch với độ lớn, giống như trong ký hiệu khoa học, do đó bạn có thể đại diện cho cả những khác biệt nhỏ gần bằng 0 và khác biệt lớn hơn rất xa.

Bài báo của Goldberg có lẽ là phân tích nổi tiếng nhất về các tính chất của số dấu phẩy động (và nên đọc nếu bạn quan tâm đến loại này), nhưng tôi nghĩ rằng các bài báo của Kahan làm tốt hơn việc giải thích lý do căn bản đằng sau nhiều điều tinh tế vấn đề thiết kế.

Cụ thể, diatribe của Kahan về việc triển khai điểm nổi của Java , trong khi khá viêm, đưa ra một số điểm tốt về lý do tại sao ngữ nghĩa của IEEE-754 là hữu ích và Bit Bit của Ado About nothing khám phá lý do căn bản để ký 0 ở độ sâu đáng kể.


Tôi chưa đọc toàn bộ bài viết của Kahan, nhưng anh ta có vẻ lịch sự hơn tôi. Java có thể có các số hữu ích hơn và hoạt động nhanh hơn so với những gì nó thực sự có nếu nó đã thêm một realloại sẽ lấy ba mục ngăn xếp để lưu trữ và thể hiện độ chính xác tính toán tự nhiên của máy; giá trị có thể được lưu trữ dưới dạng float 80 bit + 16 bit đệm cho float 64 bit + 32 bit, hoặc 64 bit mantissa, lũy thừa 16 bit và 16 bit cho ký hiệu và cờ [cho việc triển khai không phải của FPU].
supercat

Chỉ định đó floatdoublelà các định dạng lưu trữ và reallà định dạng tính toán. Trong nhiều hệ thống không có FPU, làm việc với mantissa, số mũ và cờ nằm ​​trên ranh giới từ và nửa từ sẽ nhanh hơn việc phải giải nén và đóng gói lại gấp đôi với mọi thao tác.
supercat

2

TL; DR Chúng tôi không biết cách tính toán hầu hết các hàm với độ chính xác hoàn hảo, do đó không có điểm nào đại diện cho các số có độ chính xác hoàn hảo.

Tất cả các câu trả lời cho đến nay đều bỏ lỡ điểm quan trọng nhất: chúng ta không thể tính giá trị chính xác của hầu hết các số. Trong trường hợp đặc biệt quan trọng, chúng ta không thể tính các giá trị chính xác của hàm số mũ - chỉ trích dẫn hàm vô lý quan trọng nhất.

Câu trả lời ngây thơ cho câu hỏi ngây thơ

Có vẻ như câu hỏi của bạn là khá có các thư viện số học chính xác, tại sao chúng ta không sử dụng chúng thay cho số học dấu phẩy động? Câu trả lời là số học chính xác hoạt động trên các số hữu tỷ và:

  • Số Archimede - tên mô phạm của số pi - không hợp lý.
  • Nhiều hằng số quan trọng khác không hợp lý.
  • Nhiều hằng số quan trọng khác thậm chí không được biết là hợp lý hay không.
  • Đối với bất kỳ số hữu tỷ khác không x số exp (x) là không hợp lý.
  • Các tuyên bố tương tự giữ các gốc tự do, logarit và vô số các chức năng quan trọng đối với các nhà khoa học (phân phối của Gauss, CDF, các hàm Bessel, các hàm Euler, Rách).

Con số hợp lý là một tai nạn may mắn. Hầu hết các số không hợp lý (xem định lý của Baire) vì vậy tính toán trên các số sẽ luôn đưa chúng ta ra khỏi thế giới hợp lý.

Điện toán và đại diện cho một số là gì?

Chúng tôi có thể phản ứng bằng cách nói rằng OK OK, vấn đề là các số hữu tỷ không phải là một lựa chọn tuyệt vời để đại diện cho các số thực. Sau đó, chúng tôi đưa ra các nhánh của mình ngã ba Debian và tạo ra một hệ thống đại diện mới cho các số thực.

Nếu chúng ta muốn tính toán các số, chúng ta phải chọn một hệ thống biểu diễn cho các số thực và mô tả các hoạt động quan trọng trên chúng - tức là xác định ý nghĩa của điện toán . Vì chúng tôi quan tâm đến tính toán khoa học, chúng tôi muốn biểu diễn chính xác tất cả các số thập phân (số đo của chúng tôi), chỉ số của chúng (số hữu tỷ), giá trị của các hàm số mũ và một số hằng số vui nhộn, như số của Archimede.

Vấn đề là cách duy nhất để biểu diễn hoàn hảo các số trong một hệ thống như vậy là sử dụng dạng biểu tượng, nghĩa là không tính toán bất cứ thứ gì và làm việc với các biểu thức đại số. Đây là một đại diện khá tê liệt của các số thực, bởi vì chúng ta không thể so sánh một cách đáng tin cậy hai số (số nào lớn hơn)? Thậm chí chúng ta không thể dễ dàng trả lời câu hỏi Số có phải là số đã cho bằng 0 không?

Nếu bạn tìm kiếm các định nghĩa và vấn đề toán học chính xác hơn, hãy tìm các số hữu tỷ, số siêu việt, xấp xỉ tốt nhất và định lý Baire chẳng hạn.


Tôi nghĩ rằng đây là một câu trả lời tuyệt vời, chỉ cần không có câu hỏi này, trong chừng mực tôi không tự tin rằng người hỏi sẽ hiểu những điểm bạn đang làm. Điều đó và bạn đang khá lúng túng với biểu diễn không chính xác của \ Real hoặc \ Số phức bằng cách biểu diễn kỹ thuật số hữu hạn (bất kể độ rộng bit động hay tĩnh). Đó là tất cả sự thật, nhưng bên cạnh quan điểm. Kudos đã không trích dẫn Goldberg đồng minh. :) Và định lý của Baire không phải là một phần của các biện pháp tu từ thông thường được tìm thấy trên Lập trình viên hoặc StackOverflow.
mctylr

0

Bởi vì

1) Các tác giả đưa ra các giả định rằng "tính toán kỹ thuật và khoa học" đo lường các đại lượng vật lý trong thế giới thực

2) Các đại lượng vật lý là liên tục và chính xác như bạn nêu "số dấu phẩy động cho phép bạn mô hình số lượng liên tục"

.. và phần còn lại của câu trả lời của tôi được Rufflewind tóm tắt một cách độc đáo , vì vậy tôi sẽ không nhắc lại ở đây.


0

Số dấu phẩy động cung cấp độ chính xác tương đối: chúng có thể biểu thị các số có tỷ lệ phần trăm nhỏ (nếu bạn muốn gọi một số phần trăm như 0,00000000001% một phần trăm) từ bất kỳ số chính xác nào trong một phạm vi số rộng. Họ chia sẻ đặc điểm này với quy tắc trượt, mặc dù sau này không cải thiện hơn so với 3 chữ số chính xác. Tuy nhiên, nó vẫn khá đủ để xử lý các lực tĩnh và động của các cấu trúc lớn trước khi máy tính kỹ thuật số trở nên phổ biến, và đó là vì các hằng số vật liệu cũng cho thấy một số biến thể và chọn các cấu trúc hợp lý chống lại sự khác biệt về vật liệu và xây dựng sẽ có xu hướng để làm cho tải tối đa và điểm yếu có thể nhận dạng hợp lý.

Bây giờ "độ chính xác" là một tính năng hữu ích cho nhiều số biểu thị các phép đo và / hoặc độ lớn của các tính chất vật lý.

Không phải tất cả mọi thứ trong khoa học / kỹ thuật thuộc về thể loại đó. Ví dụ: nếu bạn đang sử dụng các phép biến đổi lý thuyết số để nhân các số lớn hoặc các trường Galois để thao tác các đa thức sửa lỗi, thì không có lỗi nào xảy ra: bất kỳ lỗi bit nào trong quá trình xử lý sẽ dẫn đến kết quả khá khác biệt so với hoàn toàn ngẫu nhiên tiếng ồn.

Ngay cả ở những khu vực đó, người ta có thể làm việc với các số dấu phẩy động (như sử dụng các FFT phức tạp để thực hiện tích chập) nếu theo dõi sự tích lũy của các lỗi và đảm bảo rằng các lỗi của dấu phẩy động không tích lũy đủ cường độ để thậm chí có thể lật một bit trong các thực thể mà chúng là một xấp xỉ của. Đối với các xấp xỉ như vậy, xử lý điểm cố định có thể sẽ phù hợp hơn nhưng các đơn vị dấu phẩy động trong trường có xu hướng cung cấp hoạt động nhanh hơn và số lượng bit có thể sử dụng lớn hơn.

Ngoài ra, các ngôn ngữ lập trình như C hoặc Fortran khiến chúng ta khó có thể truy cập các hoạt động cơ bản như nhân và chia chính xác hỗn hợp hoặc bit mang để cộng / trừ, và đó là các khối xây dựng cơ bản để vượt qua các số nguyên chính xác có giới hạn.

Vì vậy, nếu bạn có thể ánh xạ các hoạt động thành các số dấu phẩy động, bạn có xu hướng sử dụng phần cứng mạnh mẽ một cách hợp lý vào những ngày này và bạn có thể chỉ định hợp lý các thuật toán của mình bằng một trong những ngôn ngữ lập trình mục đích chung hiện nay.


0

Tôi nghĩ điều này có thể được trả lời bằng cách giải quyết loại ứng dụng float/ doubledữ liệu nào không phù hợp.

Khi bạn cần đảm bảo rằng bạn có thể biểu diễn một số chính xác bằng một số chữ số cụ thể, thì số dấu phẩy động là không phù hợp, bởi vì chúng đại diện cho các số là lũy thừa của 2, thay vì lũy thừa 10, như cách chúng ta biểu thị các số trong thế giới thực.

Vì vậy, một miền trong đó các loại dữ liệu dấu phẩy động không nên được sử dụng là tài chính *. Đối với hệ thống cốt lõi của ví dụ như một ngân hàng, sẽ hoàn toàn không thể chấp nhận được nếu số tiền đáng lẽ là $ 100000,01 đột nhiên trở thành $ 100000,00 hoặc $ 100000,02.

Một vấn đề như vậy có thể dễ dàng xảy ra khi sử dụng số float, đặc biệt nếu số đó là kết quả của một hoặc nhiều phép tính, ví dụ: tính tổng của tất cả các giao dịch trong tài khoản.

Kỹ thuật và tính toán khoa học là các lĩnh vực mà các lỗi làm tròn tương đối nhỏ này được chấp nhận. Người dùng thường nhận thức được rằng tất cả các số có độ chính xác hạn chế và chúng thường hoạt động với một số chữ số có nghĩa . Nhưng quan trọng nhất là chúng có độ chính xác tương đối được xác định rõ, tức là chúng đã cung cấp cùng một số chữ số có nghĩa, cả cho số rất lớn và cho số rất nhỏ.

* Tôi đã từng làm việc trên một ứng dụng tài chính trong đó floats đã được sử dụng để thể hiện các giá trị và do đó, các lỗi làm tròn đã được đưa ra. May mắn thay, lỗi cụ thể này hoàn toàn không nghiêm trọng, người dùng đã phàn nàn về lỗi tính toán trong chương trình. Và điều này dẫn đến một hiệu ứng khác, tồi tệ hơn nhiều: người dùng bắt đầu mất niềm tin vào hệ thống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.