Ada dua alasan mengapa Anda harus peduli dengan tipe data numerik yang berbeda.
1. Menyimpan memori
for(long k=0;k<=10;k++)
{
//stuff
}
Mengapa menggunakan lama ketika bisa dengan mudah menjadi bilangan bulat, atau bahkan byte? Anda memang akan menghemat beberapa byte memori dengan melakukannya.
2. Angka titik mengambang dan angka integer disimpan secara berbeda di komputer
Misalkan kita memiliki nomor 22 yang disimpan dalam bilangan bulat. Komputer menyimpan nomor ini dalam memori dalam biner sebagai:
0000 0000 0000 0000 0000 0000 0001 0110
Jika Anda tidak terbiasa dengan sistem bilangan biner ini dapat direpresentasikan dalam notasi ilmiah sebagai: 2 ^ 0 * 0 + 2 ^ 1 * 1 + 2 ^ 2 * 1 + 2 ^ 3 * 0 + 2 ^ 4 * 1 + 2 ^ 5 * 0 + ... + 2 ^ 30 * 0. Bit terakhir mungkin atau mungkin tidak digunakan untuk menunjukkan apakah angka itu negatif (tergantung jika tipe data ditandatangani atau tidak ditandatangani).
Pada dasarnya, ini hanya penjumlahan dari nilai 2 ^ (bit place) *.
Ini berubah ketika Anda merujuk ke nilai yang melibatkan titik desimal. Misalkan Anda memiliki angka 3,75 dalam desimal. Ini disebut sebagai 11.11 dalam biner. Kita dapat menyatakan ini sebagai notasi ilmiah sebagai 2 ^ 1 * 1 + 2 ^ 0 * 1 + 2 ^ -1 * 1 + 2 ^ -2 * 1 atau, dinormalisasi, sebagai 1.111 * 2 ^ 2
Namun komputer tidak dapat menyimpannya: ia tidak memiliki metode eksplisit untuk mengekspresikan titik biner tersebut (versi sistem angka biner dari titik desimal). Komputer hanya dapat menyimpan angka 1 dan angka 0. Di sinilah tipe data floating point masuk.
Dengan asumsi sizeof (float) adalah 4 byte, maka Anda memiliki total 32 bit. Bit pertama diberi "bit tanda". Tidak ada pelampung tanpa tanda tangan atau ganda. 8 bit berikutnya digunakan untuk "eksponen" dan 23 bit terakhir digunakan sebagai "signifand" (atau kadang-kadang disebut sebagai mantissa). Menggunakan contoh 3,75 kami, eksponen kami adalah 2 ^ 1 dan signifikansi kami adalah 1,111.
Jika bit pertama adalah 1, angkanya negatif. Jika tidak, positif. Eksponen dimodifikasi oleh sesuatu yang disebut "bias", jadi kita tidak bisa hanya menyimpan "0000 0010" sebagai eksponen. Bias untuk angka floating point presisi tunggal adalah 127, dan bias untuk presisi ganda (di sinilah tipe data ganda mendapatkan namanya) adalah 1023. 23 bit terakhir dicadangkan untuk signifikansi. Signifikansi hanyalah nilai-nilai HAK dari titik biner kami.
Eksponen kami akan menjadi bias (127) + eksponen (1) atau diwakili dalam biner
1000 0000
Signifikan kami adalah:
111 0000 0000 0000 0000 0000
Oleh karena itu, 3,75 direpresentasikan sebagai:
0100 0000 0111 0000 0000 0000 0000 0000
Sekarang, mari kita lihat angka 8 yang direpresentasikan sebagai angka floating point dan sebagai angka integer:
0100 0001 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1000
Bagaimana di dunia ini komputer akan menambahkan 8.0 dan 8? Atau bahkan melipatgandakannya !? Komputer (lebih khusus, komputer x86) memiliki bagian-bagian berbeda dari CPU yang menambahkan angka floating point dan angka integer.