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)); }
Output biasanya menunjukkan bahawa :
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!