Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kita Boleh Mengatasi Isu Ketepatan dalam Aritmetik Titik Terapung?

Bagaimanakah Kita Boleh Mengatasi Isu Ketepatan dalam Aritmetik Titik Terapung?

Linda Hamilton
Linda Hamiltonasal
2024-12-01 00:22:15774semak imbas

How Can We Overcome Accuracy Issues in Floating-Point Arithmetic?

Mengatasi Isu Ketepatan dalam Nombor Titik Terapung

Nombor titik terapung, jenis data yang digunakan secara meluas dalam pengkomputeran, menimbulkan masalah ketepatan yang berpotensi disebabkan kepada perwakilan intrinsik mereka dalam mesin. Untuk menggambarkan isu ini:

#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str = "4.600";
  double mw = atof(str);
  float p = 0.2;
  float g = 0.2;
  int h = 1;

  int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1;
  printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g));
  printf("Columns: %d\n", columns);

  return 0;
}

Dalam kod ini, str ialah perwakilan rentetan bagi "4.600", dan memanggil atof(str) menukarkannya kepada mw berganda. Pengiraan seterusnya menghasilkan keputusan yang malang: perwakilan titik terapung 4.5999999999999996 tidak boleh mewakili nilai 4.600 yang diingini dengan tepat.

Mengatasi Isu

Penyelesaian >

Diserlahkan dengan tepat , mencapai kesamaan tepat dengan aritmetik titik terapung boleh dikatakan mustahil. Sebaliknya, adalah lebih baik untuk membandingkan nilai dalam julat yang boleh diterima. Dalam senario tertentu, adalah penting untuk mengetahui bahawa nilai tertentu tidak boleh diwakili dengan tepat sebagai nombor titik terapung.

Sumber Disyorkan

Untuk mendapatkan maklumat lanjut, rujuk rujukan berikut:

  • [Apa yang Setiap Saintis Komputer Patut Tahu Mengenai Floating-Point Aritmetik](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
  • [Membandingkan nombor titik terapung](https://floating-point-gui. de/)

Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Mengatasi Isu Ketepatan dalam Aritmetik Titik Terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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