Senin, 09 Desember 2013

Floating point



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