Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memastikan Ketepatan Titik Terapung dalam C ?

Bagaimana untuk Memastikan Ketepatan Titik Terapung dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-11-05 16:32:02514semak imbas

How to Ensure Accurate Floating-Point Precision in C  ?

Ketepatan Titik Terapung dalam C

Apabila berurusan dengan nombor titik terapung dalam C , adalah penting untuk memahami had ketepatannya. Pertimbangkan kod berikut:

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

Hasilnya ialah 0.2999999999999999889 dan bukannya 0.3, menunjukkan kehilangan ketepatan. Untuk menangani perkara ini, C menyediakan pemalar std::numeric_limits::digit10, dengan T ialah jenis nombor titik terapung. Pemalar ini mewakili bilangan maksimum digit bererti yang boleh diwakili dengan tepat.

Begini cara menggunakan std::numeric_limits::digit10 untuk menetapkan ketepatan dengan betul:

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

Kod ini menetapkan ketepatan kepada bilangan maksimum digit bererti yang boleh diwakili dengan tepat dengan dua kali ganda. Hasilnya, output akan menjadi 0.3 dalam kedua-dua kes.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa walaupun dengan pendekatan ini, ralat terkumpul mungkin berlaku jika gelung berulang dengan ketara lebih daripada 50 kali. Ini kerana nombor titik terapung adalah anggaran, dan ralat boleh terkumpul sepanjang siri operasi. Untuk mengendalikan situasi sedemikian, adalah disyorkan untuk menggunakan perpustakaan yang menyediakan aritmetik ketepatan arbitrari, seperti Boost.Multiprecision.

Atas ialah kandungan terperinci Bagaimana untuk Memastikan Ketepatan Titik Terapung dalam C ?. 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