Rumah > pembangunan bahagian belakang > C++ > Mengapa Aritmetik Titik Terapung dalam C Membawa kepada Ralat Ketepatan?

Mengapa Aritmetik Titik Terapung dalam C Membawa kepada Ralat Ketepatan?

Mary-Kate Olsen
Lepaskan: 2024-11-04 13:06:02
asal
411 orang telah melayarinya

Why Does Floating-Point Arithmetic in C   Lead to Precision Errors?

Ketepatan Titik Terapung dalam C

Dalam C, nombor titik terapung adalah tepat sehingga bilangan tempat perpuluhan tertentu. Walau bagaimanapun, terdapat had pada ketepatan ini, yang boleh membawa kepada hasil yang tidak dijangka.

Pernyataan Masalah

Pertimbangkan coretan kod berikut:

<code class="cpp">double a = 0.3;
std::cout.precision(20);
std::cout << a << std::endl;

// Print 0.2999999999999999889

double a, b;
a = 0.3;
b = 0;
for (char i = 1; i <= 50; i++) {
  b = b + a;
};
std::cout.precision(20);
std::cout << b << std::endl;

// Print 15.000000000000014211
Salin selepas log masuk

Seperti yang digambarkan, a kurang sedikit daripada 0.3, tetapi apabila didarab dengan 50, b menjadi lebih besar sedikit daripada 15.0. Sisihan daripada hasil yang dijangkakan ini boleh dikaitkan dengan had ketepatan titik terapung.

Penyelesaian

Untuk mendapatkan keputusan yang betul, adalah penting untuk mengelakkan daripada menetapkan ketepatan lebih tinggi daripada ketepatan yang tersedia untuk jenis angka. Coretan kod yang disemak berikut menunjukkan pendekatan ini:

<code class="cpp">#include <iostream>
#include <limits>
int main() {
  double a = 0.3;
  std::cout.precision(std::numeric_limits<double>::digits10);
  std::cout << a << std::endl;

  double b = 0;
  for (char i = 1; i <= 50; i++) {
    b = b + a;
  };
  std::cout.precision(std::numeric_limits<double>::digits10);
  std::cout << b << std::endl;
}</code>
Salin selepas log masuk

Pendekatan ini memastikan ketepatan ditetapkan kepada maksimum yang tersedia untuk jenis data berganda. Adalah penting untuk ambil perhatian bahawa jika gelung dijalankan untuk bilangan lelaran yang jauh lebih besar, seperti 5000 dan bukannya 50, ralat terkumpul akhirnya akan menjadi ketara, tanpa mengira tetapan ketepatan. Ini adalah had semula jadi aritmetik titik terapung.

Atas ialah kandungan terperinci Mengapa Aritmetik Titik Terapung dalam C Membawa kepada Ralat Ketepatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan