Bagikan melalui


Jenis float

Angka floating-point menggunakan format IEEE (Institute of Electrical and Electronics Engineers). Nilai presisi tunggal dengan jenis float memiliki 4 byte, terdiri dari bit tanda, eksponen biner 8-bit kelebihan 127, dan mantissa 23-bit. Mantissa mewakili angka antara 1,0 dan 2,0. Karena bit mantissa urutan tinggi selalu 1, itu tidak disimpan dalam angka. Representasi ini memberikan rentang sekitar 3,4E-38 hingga 3,4E+38 untuk jenis float.

Anda dapat mendeklarasikan variabel sebagai float atau ganda, tergantung kebutuhan aplikasi Anda. Perbedaan utama antara kedua jenis tersebut adalah signifikansi yang dapat mereka wakili, penyimpanan yang mereka butuhkan, dan rentangnya. Tabel berikut menunjukkan hubungan antara signifikansi dan persyaratan penyimpanan.

Jenis Floating-Point

Jenis Digit signifikan Jumlah byte
float 6 - 7 4
ganda 15 - 16 8

Variabel floating-point direpresentasikan oleh mantissa, yang berisi nilai angka, dan eksponen, yang berisi urutan besarnya angka.

Tabel berikut menunjukkan jumlah bit yang dialokasikan untuk mantissa dan eksponen untuk setiap jenis floating-point. Bit yang paling signifikan dari float atau double selalu merupakan bit tanda. Jika 1, jumlahnya dianggap negatif; jika tidak, itu dianggap sebagai angka positif.

Panjang Eksponen dan Mantissas

Jenis Panjang eksponen Panjang mantissa
float 8 bit 23 bit
ganda 11 bit 52 bit

Karena eksponen disimpan dalam bentuk yang tidak ditandatangani, eksponen dibiaskan oleh setengah dari nilai yang mungkin. Untuk jenis float, biasnya adalah 127; untuk jenis ganda, itu adalah 1023. Anda dapat menghitung nilai eksponen aktual dengan mengurangi nilai bias dari nilai eksponen.

Mantissa disimpan sebagai pecahan biner lebih besar dari atau sama dengan 1 dan kurang dari 2. Untuk jenis float dan double, ada 1 terkemuka yang tersirat dalam mantissa dalam posisi bit yang paling signifikan, sehingga mantissa sebenarnya panjangnya 24 dan 53 bit, masing-masing, meskipun bit yang paling signifikan tidak pernah disimpan dalam memori.

Alih-alih metode penyimpanan yang baru saja dijelaskan, paket floating-point dapat menyimpan angka floating-point biner sebagai angka denormalisasi. "Angka denormalisasi" adalah angka floating-point nonzero dengan nilai eksponen yang dipesan di mana bit mantissa yang paling signifikan adalah 0. Dengan menggunakan format denormalisasi, rentang angka floating-point dapat diperpanjang dengan biaya presisi. Anda tidak dapat mengontrol apakah angka floating-point diwakili dalam bentuk dinormalisasi atau dinormalisasi; paket floating-point menentukan representasi. Paket floating-point tidak pernah menggunakan bentuk denormalisasi kecuali eksponen menjadi kurang dari minimum yang dapat diwakili dalam bentuk yang dinormalisasi.

Tabel berikut ini memperlihatkan nilai minimum dan maksimum yang bisa Anda simpan dalam variabel setiap jenis floating-point. Nilai yang tercantum dalam tabel ini hanya berlaku untuk angka floating-point yang dinormalisasi; angka floating-point denormalisasi memiliki nilai minimum yang lebih kecil. Perhatikan bahwa angka yang dipertahankan dalam register 80x87 selalu diwakili dalam bentuk 80-bit yang dinormalisasi; angka hanya dapat diwakili dalam bentuk denormalisasi ketika disimpan dalam variabel floating-point 32-bit atau 64-bit (variabel jenis float dan jenis panjang).

Rentang Jenis Floating-Point

Jenis Nilai minimum Nilai maksimum
float 1.175494351 E - 38 3.402823466 E + 38
ganda 2.2250738585072014 E - 308 1.7976931348623158 E + 308

Jika presisi kurang menjadi perhatian daripada penyimpanan, pertimbangkan untuk menggunakan jenis float untuk variabel floating-point. Sebaliknya, jika presisi adalah kriteria yang paling penting, gunakan jenis ganda.

Variabel floating-point dapat dipromosikan ke jenis signifikansi yang lebih besar (dari jenis float ke jenis ganda). Promosi sering terjadi ketika Anda melakukan aritmetika pada variabel floating-point. Aritmatika ini selalu dilakukan dalam tingkat presisi tinggi sebagai variabel dengan tingkat presisi tertinggi. Misalnya, pertimbangkan dua jenis deklarasi berikut:

float f_short;
double f_long;
long double f_longer;

f_short = f_short * f_long;

Dalam contoh sebelumnya, variabel f_short dipromosikan ke jenis ganda dan dikalikan dengan f_long; maka hasilnya dibulatkan untuk mengetik float sebelum ditetapkan ke f_short.

Dalam contoh berikut (yang menggunakan deklarasi dari contoh sebelumnya), aritmatika dilakukan dalam presisi float (32-bit) pada variabel; hasilnya kemudian dipromosikan ke jenis ganda:

f_longer = f_short * f_short;

Lihat juga

Penyimpanan Jenis Dasar