Bagaimana untuk Memastikan Ketepatan Titik Terapung dalam C ?

Barbara Streisand
Lepaskan: 2024-11-05 16:32:02
asal
468 orang telah melayarinya

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;
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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