JS hanya memiliki satu tipe data numerik. Apakah itu bilangan bulat atau nomor floating point, JS mengklasifikasikannya sebagai angka.
tipe 17; // "nomor"
Tipeof 98.6; // "nomor"
Tipeof 2.1; // "nomor"
Semua angka dalam JS adalah angka floating point presisi ganda. Ini adalah nomor kode 64-bit yang diformulasikan oleh standar IEEE754 (apa hal ini, saya tidak tahu, lihat saja dan periksa)
Jadi bagaimana JS mengekspresikan bilangan bulat? Angka poin floating presisi ganda dapat dengan sempurna mewakili bilangan bulat dengan presisi hingga 53-bit (tidak ada konsep, saya belum memproses terlalu banyak data, saya belum pernah menggunakannya!), Dan semua bilangan bulat dari -9007199254740992 (-253) ke point 900719925474092 (253) adalah nomor double valid.
Sebagian besar operator aritmatika dapat dihitung menggunakan bilangan bulat, bilangan real, atau kombinasi keduanya.
0.1*1.9 //0.19
-99+100 // 1
21-12.3 //8.7
2.5/5 //0.5
21%8 // 5
Operator aritmatika cukup istimewa. JS tidak secara langsung menghitung operan sebagai angka titik mengambang, tetapi secara implisit mengubahnya menjadi bilangan bulat 32-bit untuk melakukan operasi. (Tepatnya, itu akan dikonversi menjadi bilangan bulat yang mewakili 2 dari 32-bit-endian (jujur
contoh:
8 | 1; // 9
Proses perhitungan
Pertama-tama, 8 dan 1 adalah angka floating point presisi ganda. Tetapi juga dapat direpresentasikan sebagai bilangan bulat 32-bit, yaitu representasi biner 32-bit.
Integer 8 direpresentasikan sebagai biner 32-bit sebagai:
0000 0000 0000 0000 0000 0000 0000 1000
Mungkin juga
(8) .tostring (2); // "1000"
Parameter tostring adalah basis konversi
(Berikut ini adalah apa yang saya coba konversi dengan kardinalitas lain, dan itu tidak ada hubungannya dengan artikel ini)
(8) .tostring (8); // "10"
(8) .tostring (16); // "8"
Integer 1 direpresentasikan sebagai biner 32-bit seperti:
0000 0000 0000 0000 0000 0000 0000 0000 0001
Jalankan bitwise atau
0000 0000 0000 0000 0000 0000 0000 1000
0000 0000 0000 0000 0000 0000 0000 0000 0001
-----------------------------------------------------------------------------------------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1001
Hal yang sama menggunakan verifikasi parseint fungsi pustaka standar, dan menggunakan 2 sebagai kardinalitas. 0 terkemuka tidak mempengaruhi hasil perhitungan, yang tidak perlu.
Parseint ('1001', 2) // 9
(Berikut ini adalah apa yang saya coba konversi dengan kardinalitas lain, dan itu tidak ada hubungannya dengan artikel ini)
Parseint ('1001', 8) // 513
Parseint ('1001', 16) // 4097
Proses meringkas operasi aritmatika adalah untuk mengubah operan menjadi bilangan bulat, kemudian menggunakan mode bit integer untuk melakukan operasi, dan akhirnya mengubah hasilnya menjadi nomor titik mengambang JS standar.
PERINGATAN NOMBER POIN FLOATING: terkenal tidak akurat. Misalnya
0,1+0,2; //0.30000000000000000004
Alasan: Meskipun keakuratan angka poin floating 64-bit sudah sangat tinggi, bilangan titik mengambang presisi ganda hanya dapat mewakili serangkaian angka yang terbatas, tetapi tidak dapat mewakili semua rangkaian bilangan real. Operasi titik mengambang hanya dapat menghasilkan hasil perkiraan, membulatkan ke bilangan real terdekat yang dapat diwakili. Saat Anda melakukan serangkaian operasi, karena kesalahan pembulatan menumpuk, hasil operasi akan menjadi kurang akurat. Pembulatan juga menyebabkan beberapa penyimpangan dalam hukum operasi aritmatika. Misalnya, hukum ikatan. Untuk bilangan real apa pun
x, y, z akan selalu memuaskan (x+y)+z = x+(y+z)
Titik mengambang tidak harus:
(0,1+0,2) +0.3; //0.60000000000000000001
0,1+ (0,2+0,3); //0.6
Angka titik mengambang menimbang keakuratan dan kinerja. Saat Anda peduli dengan ketepatan, berhati -hatilah dengan keterbatasan angka floating point.
Solusinya adalah mengonversi operasi titik mengambang menjadi operasi integer.
(10+20) +30; // 60
10+ (20+30); // 60
Kemudian bagi faktor pembesaran. Perhatikan bahwa rentang integer harus berada di dalam -253 ~ 253.
Meringkaskan
1. Jumlah JS adalah angka floating point presisi ganda
2. Integer JS hanyalah sebagian dari bilangan titik floating presisi ganda, bukan tipe tunggal
3. Operasi bit memperlakukan angka sebagai bilangan bulat yang ditandatangani dari 32 bit
4. Waspadalah terhadap keakuratan operasi titik mengambang
Artikel di atas pemahaman mendalam tentang angka floating point di JavaScript adalah semua konten yang telah saya bagikan dengan Anda. Saya harap ini dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.