Dalam
komputasi , floating point menggambarkan representasi dari perkiraan dari
bilangan real dengan cara yang dapat mendukung berbagai nilai. Angka-angka
yang, secara umum, mewakili sekitar untuk tetap jumlah signifikan digit
(mantissa) dan skala menggunakan eksponen . Dasar untuk scaling biasanya 2, 10
atau 16. Jumlah khas yang dapat diwakili tepat adalah dalam bentuk:
Signifikan digit
basis eksponen ×
Ide
representasi floating-point lebih intrinsik bilangan fixed-point nomor, yang
terdiri murni dari significand , adalah bahwa memperluas dengan komponen
eksponen mencapai rentang yang lebih besar. Misalnya, untuk mewakili
nilai-nilai besar, misalnya jarak antara galaksi, tidak ada kebutuhan untuk
menyimpan semua 39 tempat desimal ke femtometre resolusi (digunakan dalam
fisika partikel). Dengan asumsi bahwa resolusi terbaik di tahun cahaya , hanya
9 digit desimal yang paling signifikan masalah, sedangkan sisanya 30 digit
membawa suara murni, dan dengan demikian dapat dengan aman turun. Ini merupakan
penghematan dari 100 bit dari penyimpanan data komputer . Alih-alih ini 100
bit, lebih sedikit digunakan untuk mewakili skala (eksponen), misalnya 8 bit
atau 2 angka desimal. Mengingat bahwa satu nomor dapat mengkodekan jarak kedua
astronomi dan subatomik dengan sama sembilan digit akurasi, tetapi karena
sejumlah 9 digit adalah 100 kali lebih akurat dibandingkan dengan 11 digit
disediakan untuk skala, ini dianggap sebagai trade-off bertukar jangkauan untuk
presisi . Contoh menggunakan skala untuk memperluas jangkauan dinamis
mengungkapkan kontras lain dengan nomor fixed-point: nilai Floating-point tidak
seragam spasi. Nilai kecil, mendekati nol, dapat diwakili dengan resolusi lebih
tinggi (misalnya satu femtometre) daripada yang besar karena skala yang lebih
besar (misalnya tahun cahaya) harus dipilih untuk pengkodean nilai-nilai secara
signifikan lebih besar. Artinya, angka
floating-point tidak dapat mewakili titik koordinat dengan akurasi atom pada
jarak galaksi, hanya dekat dengan asal.
Istilah
floating point mengacu pada fakta bahwa nomor itu titik radix (titik desimal,
atau, lebih umum pada komputer, titik biner) bisa "mengambang",
yaitu, dapat ditempatkan di manapun relatif terhadap angka signifikan dari
nomor tersebut. Posisi ini diindikasikan sebagai komponen eksponen dalam
representasi internal, dan floating point dengan demikian dapat dianggap
sebagai realisasi komputer notasi ilmiah .
Selama
bertahun-tahun, berbagai floating-point representasi telah digunakan dalam
komputer. Namun, sejak tahun 1990-an, representasi yang paling sering ditemui
adalah bahwa didefinisikan oleh IEEE 754 standar.
Kecepatan
operasi floating-point, sering disebut dalam pengukuran kinerja sebagai FLOPS ,
merupakan ciri penting dari sebuah sistem komputer, terutama dalam perangkat
lunak yang melakukan perhitungan matematika skala besar.
Sebuah
representasi nomor (disebut sistem angka dalam matematika) menentukan beberapa
cara untuk menyimpan nomor yang dapat dikodekan sebagai string digit.
Aritmatika didefinisikan sebagai serangkaian tindakan pada representasi yang
mensimulasikan operasi aritmatika klasik.
Ada
beberapa mekanisme yang string dari digit dapat mewakili angka. Dalam notasi
matematika umum, string digit dapat dari setiap panjang, dan lokasi titik radix
ditunjukkan dengan menempatkan eksplisit "titik" karakter (dot atau
koma) di sana. Jika titik radix tidak ditentukan maka secara implisit
diasumsikan terletak di sebelah kanan (paling signifikan) akhir string (yaitu,
nomor adalah bilangan bulat ). Dalam fixed-point sistem, beberapa asumsi
tertentu dibuat tentang di mana titik radix terletak dalam string. Misalnya,
konvensi bisa jadi bahwa string terdiri dari 8 digit desimal dengan titik
desimal di tengah, sehingga "00012345" memiliki nilai 1.2345.
Dalam
notasi ilmiah , angka yang diberikan adalah skala oleh kekuatan 10 sehingga
terletak dalam kisaran tertentu-biasanya antara 1 dan 10, dengan titik radix
muncul segera setelah angka pertama. Faktor skala, sebagai kekuatan sepuluh,
kemudian ditunjukkan secara terpisah pada akhir nomor. Misalnya, periode
revolusi Jupiter 's bulan Io adalah 152853.5047 detik, nilai yang akan
direpresentasikan dalam notasi ilmiah-bentuk standar sebagai 1,528535047 × 10 5
detik. Representasi
floating-point yang mirip dalam konsep notasi ilmiah. Logikanya, angka
floating-point terdiri dari:
A ditandatangani
(yang berarti positif atau negatif) string digit dari panjang diberikan dalam
diberikan dasar (atau radix ). String ini digit disebut sebagai significand ,
koefisien atau, lebih jarang, mantissa (lihat di bawah). Panjang significand
menentukan presisi yang nomor dapat diwakili. Posisi titik radix diasumsikan
selalu berada di suatu tempat dalam significand-sering hanya setelah atau
sebelum digit paling signifikan, atau di sebelah kanan paling kanan (paling
signifikan) digit. Artikel ini umumnya akan mengikuti konvensi bahwa titik
radix hanya setelah paling signifikan (paling kiri) digit.
Sebuah
integer ditandatangani eksponen , juga disebut sebagai karakteristik atau
skala, yang memodifikasi besarnya nomor tersebut.
Untuk
memperoleh nilai angka floating-point, seseorang harus kalikan significand
dengan dasar pangkat dari eksponen, setara dengan menggeser titik radix dari
posisi tersirat sebesar sejumlah tempat sama dengan nilai eksponen-the ke kanan
jika eksponen positif atau ke kiri jika eksponen negatif.
Menggunakan
basis-10 (akrab desimal notasi) sebagai contoh, jumlah 152853,5047, yang
memiliki sepuluh digit desimal presisi, direpresentasikan sebagai significand
1,528535047 bersama dengan eksponen dari 5 (jika posisi tersirat dari titik
radix adalah setelah pertama digit paling signifikan, di sini 1). Untuk
menentukan nilai yang sebenarnya, titik desimal ditempatkan setelah angka
pertama significand dan hasilnya dikalikan dengan 10 5 untuk memberikan
1,528535047 × 10 5, atau 152853,5047. Dalam menyimpan nomor seperti itu, dasar
(10) tidak perlu disimpan, karena akan sama untuk seluruh kisaran angka yang
didukung, dan dengan demikian dapat disimpulkan.
S
ecara
simbolis, nilai akhir ini adalah dimana
s adalah nilai significand (setelah memperhitungkan titik radix tersirat), b
adalah dasar, dan e adalah eksponen.
Ekuivalen:
di
mana s di sini berarti nilai integer dari seluruh significand, mengabaikan
semua titik desimal tersirat, dan p adalah presisi-jumlah digit di significand
tersebut.
Secara
historis, beberapa basis nomor telah digunakan untuk mewakili angka
floating-point, dengan basis 2 ( biner ) yang paling umum, diikuti dengan basis
10 (desimal), dan varietas yang kurang umum lainnya, seperti basis 16 ( notasi
heksadesimal ), seperti serta beberapa yang eksotis seperti 3 (lihat Setun ).
Angka
floating-point adalah bilangan rasional karena mereka dapat direpresentasikan
sebagai satu bilangan bulat dibagi dengan yang lain. Misalnya 1,45 × 10 3
adalah (145/100) * 1000 atau 145000/100. Dasar namun menentukan pecahan yang
dapat diwakili. Misalnya, 1/5 tidak dapat diwakili persis seperti angka
floating-point menggunakan basis biner tetapi dapat diwakili tepat menggunakan
basis desimal (0.2, atau 2 × 10 -1). Namun 1/3 tidak dapat diwakili tepat oleh
salah biner (0,010101 ...) atau desimal (0,333 ....), tetapi dalam dasar 3 itu
sepele (0,1 atau 1 × 3 -1). Kesempatan yang tak terbatas ekspansi terjadi
tergantung pada dasar dan yang faktor utama , seperti yang dijelaskan dalam
artikel di Positional Notasi .
Cara
di mana significand tersebut, eksponen dan tanda bit secara internal disimpan
di komputer sangat tergantung dari implementasi. Format IEEE umum dijelaskan
secara rinci nanti dan di tempat lain, tetapi sebagai contoh, dalam biner
presisi tunggal (32-bit) floating-point representasi p = 24 dan seterusnya
significand adalah string dari 24 bit . Misalnya, jumlah π 's pertama 33 bit
adalah 11001001 00001111 11011010 10100010 0. Mengingat bahwa bit-24 adalah
nol, pembulatan ke 24 bit dalam mode biner berarti menghubungkan nilai-25 yang
menghasilkan 11.001.001 00.001.111 11.011.011 bit-24. Ketika ini disimpan
menggunakan IEEE 754 encoding, ini menjadi significand dengan e = 1 (di mana s
diasumsikan memiliki titik biner di sebelah kanan bit pertama) setelah
meninggalkan-penyesuaian (atau normalisasi) yang terkemuka selama atau
tertinggal nol yang terpotong harus ada apapun. Perhatikan bahwa mereka tidak
penting pula. Kemudian sejak bit pertama dari significand biner non-nol selalu
1 itu tidak perlu disimpan, memberikan sedikit tambahan presisi. Untuk menghitung
π rumus adalah di
mana n adalah significand normal yang ke-n bit dari kiri. Normalisasi, yang
dibatalkan pada saat 1 sedang ditambahkan di atas, dapat dianggap sebagai
bentuk kompresi, yang memungkinkan sebuah significand biner dapat dikompresi menjadi
lapangan sedikit lebih pendek dari presisi maksimum, dengan mengorbankan
pemrosesan tambahan.
Kata
"mantissa" sering digunakan sebagai sinonim untuk significand.
Penggunaan mantissa di tempat significand atau koefisien tidak disarankan,
karena mantissa secara tradisional didefinisikan sebagai bagian fraksional dari
logaritma, sedangkan karakteristik adalah bagian integer. Terminologi ini
berasal dari cara di mana logaritma tabel digunakan sebelum komputer menjadi
biasa. Log tabel sebenarnya tabel Mantisa.
Beberapa
representasi komputer lainnya untuk nomor non-integral
Representasi
floating-point, khususnya format standar IEEE, adalah jauh cara yang paling
umum mewakili pendekatan untuk bilangan real dalam komputer karena efisien
ditangani dalam prosesor komputer yang paling besar. Namun, ada alternatif:
Fixed-point
representasi menggunakan bilangan bulat operasi hardware dikendalikan oleh
implementasi software dari konvensi tertentu tentang lokasi titik biner atau
desimal, misalnya, 6 bit atau digit dari kanan. The hardware untuk memanipulasi
representasi ini lebih murah daripada floating point dan juga biasa digunakan
untuk melakukan operasi bilangan bulat. Titik tetap biner biasanya digunakan
dalam aplikasi tujuan khusus pada prosesor tertanam yang hanya dapat melakukan
aritmatika integer, tetapi intinya tetap desimal adalah umum dalam aplikasi
komersial.
Kode-biner
desimal (BCD) adalah encoding untuk angka desimal di mana setiap digit diwakili
oleh urutan biner sendiri. Hal ini dimungkinkan untuk menerapkan sistem
floating-point dengan BCD encoding.
Sistem
bilangan logaritmik merupakan bilangan real dengan logaritma dari nilai mutlak
dan sedikit tanda. Distribusi nilai mirip dengan floating point, tetapi kurva
nilai-untuk-representasi, yaitu grafik fungsi logaritma, halus (kecuali pada
0). Bertentangan dengan aritmatika floating-point, dalam perkalian sistem
bilangan logaritmik, divisi dan eksponensial mudah diterapkan tapi penambahan
dan pengurangan sulit. The indeks aritmatika tingkat dari Clenshaw, Olver, dan
Turner adalah skema didasarkan pada representasi logaritma umum.
Dimana
lebih presisi yang diinginkan, floating-point aritmatika dapat dilaksanakan
(biasanya dalam perangkat lunak) dengan variabel-panjang significands (dan
kadang-kadang eksponen) yang berukuran tergantung pada kebutuhan aktual dan
tergantung pada bagaimana hasil perhitungan. Ini disebut
sewenang-wenang-presisi aritmatika floating-point.
Beberapa
nomor (misalnya, 1/3 dan 1/10) tidak dapat diwakili tepat dalam biner
floating-point, tidak peduli apa presisi ini. Paket perangkat lunak yang
melakukan aritmatika rasional mewakili angka sebagai pecahan dengan pembilang
dan penyebut yang tidak terpisahkan, dan karena itu dapat mewakili setiap nomor
rasional tepat. Paket tersebut umumnya perlu menggunakan " bignum
"aritmatika untuk bilangan bulat individu.
Sistem
aljabar komputer seperti Mathematica dan Maxima sering dapat menangani bilangan
irasional seperti atau
dengan cara yang benar-benar
"resmi", tanpa berurusan dengan pengkodean tertentu significand
tersebut. Program-program tersebut dapat mengevaluasi ekspresi seperti "
"Persis, karena mereka" tahu
"matematika yang mendasari.
Pembulatan
mode
Pembulatan
digunakan ketika hasil yang tepat dari operasi floating-point (atau konversi ke
format floating-point) akan membutuhkan lebih banyak digit dari ada angka di
significand tersebut. IEEE 754 memerlukan pembulatan yang benar: yaitu, hasil
bulat seolah-olah aritmatika tak terhingga tepat digunakan untuk menghitung
nilai dan kemudian dibulatkan (meskipun dalam pelaksanaannya hanya tiga bit
ekstra diperlukan untuk memastikan hal ini). Ada beberapa yang berbeda skema
pembulatan (atau mode pembulatan). Secara historis, pemotongan adalah
pendekatan yang khas. Sejak diperkenalkannya IEEE 754, metode default ( bulat
untuk terdekat, hubungan bahkan , kadang-kadang disebut Banker Pembulatan)
lebih sering digunakan. Metode ini putaran yang ideal (jauh tepat) hasil dari
operasi aritmatika dengan nilai representable terdekat, dan memberikan
representasi bahwa sebagai hasilnya.
Dalam kasus dasi, nilai yang akan
membuat akhir significand dalam bahkan digit dipilih. The IEEE 754 standar
memerlukan pembulatan yang sama diterapkan untuk semua operasi aljabar yang
mendasar, termasuk akar kuadrat dan konversi, ketika ada angka (non-NaN) hasil.
Ini berarti bahwa hasil dari IEEE 754 operasi sepenuhnya ditentukan dalam semua
bit dari hasilnya, kecuali untuk representasi NaN. ("Library" fungsi
seperti kosinus dan log tidak diamanatkan.)
Pilihan
pembulatan alternatif juga tersedia. IEEE 754 menentukan mode pembulatan
berikut:
bulat
untuk terdekat, di mana ikatan bulat untuk terdekat bahkan digit dalam posisi
yang dibutuhkan (default dan sejauh ini modus yang paling umum)
bulat
untuk terdekat, di mana ikatan putaran dari nol (opsional untuk biner
floating-point dan umum digunakan dalam desimal)
mengumpulkan
(ke arah + ∞; hasil negatif sehingga putaran menuju nol)
putaran
bawah (arah - ∞, hasil negatif sehingga putaran dari nol)
bulat
menuju nol (pemotongan, melainkan mirip dengan perilaku umum float-to-bilangan
bulat konversi, yang mengkonversi -3.9 ke -3 dan 3,9 sampai 3)
Alternatif
mode sangat berguna ketika jumlah kesalahan yang diperkenalkan harus dibatasi.
Aplikasi yang membutuhkan kesalahan dibatasi multi-presisi floating-point, dan
aritmatika selang . Modus pembulatan alternatif juga berguna dalam mendiagnosis
ketidakstabilan numerik: jika hasil subrutin bervariasi secara substansial
antara pembulatan ke + dan - infinity maka kemungkinan numerik stabil dan
dipengaruhi oleh error round-off. Sebuah penggunaan lebih lanjut dari
pembulatan adalah ketika nomor secara eksplisit dibulatkan ke sejumlah desimal
(atau biner) tempat, seperti ketika pembulatan hasil untuk euro dan sen (dua
desimal).
Tidak ada komentar:
Posting Komentar