Máy tính Windows hiển thị đầu ra lạ


5

Hãy thử điều này trên Windows

Các bước:

  1. Mở Máy tính trực tiếp hoặc bằng cách gõ calc trong RUN.
  2. Sau đó gõ 4 và lấy căn bậc hai "sqrt"
  3. Và bất cứ điều gì bạn nhận được (lý tưởng là bạn sẽ nhận được 2!), Trừ 2 từ nó.

Bây giờ Câu hỏi của tôi là, điều này có đúng về mặt toán học không ??



Làm sao? Không hiểu bạn

@Infinite: Điều đó rất sai. Hình vuông: (R \ R ^ -) - & gt; Hàm (R \ R ^ -) là một chức năng , đó là, một quy tắc, cho mọi phần tử trong miền liên kết chính xác một phần tử trong phạm vi. sqrt (4) là 2, và không có gì khác. Tuy nhiên, phương trình x ^ 2 = 4 có chính xác hai gốc, -2 và 2, nghĩa là + sqrt (4) và -sqrt (4).
Andreas Rejbrand

@Infinite: Vâng, điều đó làm cho nó thậm chí còn tồi tệ hơn (và tôi là một nhà toán học). .
Andreas Rejbrand

Câu trả lời:


4

Lý tưởng là không đúng, nhưng cách số dấu phẩy động được thể hiện bên trong máy tính sẽ dẫn đến câu trả lời bất ngờ như vậy.

Nếu bạn nhìn vào giá trị số của câu trả lời, nó rất gần với 0, đó là câu trả lời mong đợi.


Được rồi cảm ơn. Nhưng tại sao lỗi như vậy xảy ra và làm thế nào để tránh các lỗi đó trong khi tính toán trong bất kỳ hoặc ngôn ngữ lập trình cụ thể nào. Cần phải cẩn thận.

1
Trừ khi bạn sẽ hiển thị số bằng cách sử dụng ký hiệu khoa học, như máy tính, bạn có thể sẽ không nhận thấy lỗi nhỏ này khi viết mã. Nhưng đó là một lý do bạn không bao giờ nên thực hiện kiểm tra phạm vi như while (x != 0.0) x += floatingPointResult(); hơn là một cái gì đó như while(x <= 0.0).

Umm ... Tôi nghĩ rằng máy tính Windows đã sử dụng số điểm cố định 256 bit kể từ Vista.
Mircea Chirea

@iconiK Tôi không biết điều này có liên quan gì. Bất kể độ chính xác của số, luôn có lỗi làm tròn khi thực hiện số học dấu phẩy động ( đặc biệt trên các số vô tỷ).
Breakthrough

@ Mặc dù, điểm cố định! = Điểm nổi. Điểm cố định là số học chính xác và với dữ liệu có giá trị 256 bit, rất có thể bạn sẽ không vượt quá điều đó; ngay cả khi bạn làm như vậy, nó có thể làm tròn đến giá trị 256 bit gần nhất - đây là một danh sách các chữ số thực sự dài.
Mircea Chirea

3

Không, nó không đúng về mặt toán học. 2-2 = 0 :)

Calc đang cho là -0.0000000000000000001, có nghĩa là hàm sqrt mang lại một số rất gần đến 2, nhưng có một phần phân số nhỏ được làm tròn cho mục đích hiển thị. Khi bạn trừ 2, bạn nhận được một số rất gần với 0, nhưng không hoàn toàn.

Đây là một tạo tác về cách các số dấu phẩy động được lưu trữ trong máy tính. Mỗi máy tính (không mang tính biểu tượng) sẽ có một số vấn đề tạo ra kết quả không chính xác như thế. Ví dụ: thử (sqrt (pi)) ^ 2-pi, giá trị bằng 0. Tôi chỉ thử nó trong này máy tính trực tuyến và có -1.3691388027.


Tôi đã nhận được chính xác 0 cho điều pi ...
syockit

2

nó đang cho -8.1648465955514287168521180122928e-39

về cơ bản là = 0 vì nó có 10 ^ -39 ...


1
-1. Điều đó rất sai. Hình vuông: (R \ R ^ -) - & gt; Hàm (R \ R ^ -) là một chức năng , đó là, một quy tắc, cho mọi phần tử trong miền liên kết chính xác một phần tử trong phạm vi. sqrt (4) là 2, và không có gì khác. Tuy nhiên, phương trình x ^ 2 = 4 có chính xác hai gốc, -2 và 2, nghĩa là + sqrt (4) và -sqrt (4).
Andreas Rejbrand

1
Thực tế là gì sqrt(4) = +2 và -2 có liên quan gì đến tính không chính xác của số học dấu phẩy động? Câu trả lời cũng có thể là -2 không giải thích tại sao câu trả lời không chính xác 0. Tôi không hiểu sự liên quan của phần cuối cùng với câu trả lời của bạn.
Cody Gray

Bên cạnh đó, việc x ^ 2 = c có hai gốc hoàn toàn không liên quan gì đến vấn đề hiện tại ...
Andreas Rejbrand

@Code Grey: Nhận xét rất tốt, ngoại trừ thực tế là sqrt (x) là MỘT giá trị, không phải hai!
Andreas Rejbrand

@Andreas: Vâng, tôi thấy rằng bạn vừa nhận xét rằng. Tôi biết nó nghe có vẻ sai với tôi, nhưng tôi không thể nói rõ nó gần như bạn đã làm. Tôi đã quan tâm nhiều hơn đến cách nó có liên quan đến câu trả lời.
Cody Gray
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.