Rumah > pembangunan bahagian belakang > C++ > Mengapa Nombor Ketepatan Berganda Nampak Lebih Tepat Daripada 15 Tempat Perpuluhan?

Mengapa Nombor Ketepatan Berganda Nampak Lebih Tepat Daripada 15 Tempat Perpuluhan?

Mary-Kate Olsen
Lepaskan: 2024-11-30 18:04:16
asal
694 orang telah melayarinya

Why Do Double-Precision Numbers Seem More Precise Than 15 Decimal Places?

Tempat Perpuluhan Ketepatan Berganda

Soalan:

Walaupun dokumentasi mencadangkan bahawa nilai ketepatan dua kali mempunyai ketepatan 15 tempat perpuluhan, nilai dalaman selalunya menunjukkan lebih ketepatan. Mengapakah percanggahan ini diperhatikan?

Jawapan:

Dua IEEE mempunyai 53 bit bererti, memberikan kira-kira 15.95 digit perpuluhan ketepatan (berdasarkan log formula10(253)). Ketepatan teori ini lebih besar sedikit daripada 15 digit perpuluhan yang ditunjukkan oleh pemalar DBL_DIG. Ketepatan tambahan diambil kira oleh bit bererti tambahan.

Fungsi nextafter() menunjukkan ketepatan sebenar bagi gandaan yang diberikan. Dengan mengira nombor boleh diwakili terdekat kepada nilai yang diberikan, ia mendedahkan bahawa nilai ketepatan dua kali lazimnya mempunyai 16 digit bererti.

Berikut ialah atur cara yang menggambarkan perkara ini:

#include <cstdio>
#include <cfloat>
#include <cmath>

int main() {
    double x = 1.0/7.0;
    printf("FLT_RADIX = %d\n", FLT_RADIX);
    printf("DBL_DIG = %d\n", DBL_DIG);
    printf("DBL_MANT_DIG = %d\n", DBL_MANT_DIG);
    printf("%.17g\n%.17g\n%.17g\n", nextafter(x, 0.0), x, nextafter(x, 1.0));
}
Salin selepas log masuk

Output biasanya menunjukkan bahawa :

  • 1.0/7.0 diwakili dengan kira-kira 16 signifikan digit.
  • Bit perenambelasan terakhir berselang seli antara 0 dan 1 untuk nilai berturut-turut.
  • Nilai matematik 1.0/7.0 (0.142857142857142857) hanya diwakili lebih kurang dalam ketepatan dua kali ganda.>

Atas ialah kandungan terperinci Mengapa Nombor Ketepatan Berganda Nampak Lebih Tepat Daripada 15 Tempat Perpuluhan?. 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