Saturday 5 August 2017

Normalized Form Binary Options


Bagaimana merepresentasikan 0.148 2 dalam aritmatika floating point yang dinormalisasi dengan format (0.148) (0.00100101111.) 2 Kami menggesernya 3 bit ke kiri untuk membuatnya dinormalisasi (1.00101111) 2 2. Eksponen 1164 (75) (1001011) 2 dan Mantissa (01001111) 2. Jadi representasi floating point adalah (0100101100101111) 2 (4B2F) Representasi A Tetapi jika kita menyimpan mantissa denormalized ke dalam register 8 bit, maka wont telah menyimpan tiga terakhir 1s dan kemudian mantissa akan dinormalisasi dari (0.00100101) 2 menjadi (1.00101000 ) 2 dengan memasukkan 3 0s, bukan 1s. Representasi akan menjadi seperti saat ini, normalisasi, apakah prosesor memperhitungkan bit mantissa denormalized di luar 8 bit juga Atau hanya mengulurkannya Mana yang benar: A atau B Apakah itu menyimpan mantissa Dalam representasi titik tetap Bagaimana cara kerjanya? Halaman ini diterjemahkan dari yang asli dengan menggunakan penerjemah Google. IEEE 754 - Pelapisan aritmatika biner standar Pengarang: Yashkardin Vladimirnbsp nbsp softelectro. ru nbsp nbsp 2009-2011 nbsp nbsp nbsp nbsp nbsp infosoftelectro. ru 1. Judul Standar. Standar ini dirancang asosiasi IEEE (Institute of Electrical and Electronics Engineers) dan digunakan untuk mewakili bilangan real (floating point) dalam kode biner. Standar yang paling banyak digunakan untuk floating point, digunakan oleh banyak perangkat mikroprosesor dan logika dan perangkat lunak. Judul lengkap Standar dalam Asosiasi IEEE: Standar IEEE untuk Aritmatika Floating Point Basis (ANSIIEEE Std 754-1985) Judul Standar Komisi Elektroteknik Internasional IEC: IEC 60559: 1989, aritmatika floating-point biner untuk sistem mikroprosesor (IEC 559: 1989 - penunjukan standar yang lama) Pada tahun 2008, asosiasi tersebut telah merilis standar IEEE 754-2008 IEEE, termasuk standar IEEE 754-1985. 2. Penjelasan singkat tentang standar. Edisi asli standar: Standar IEEE untuk Binary Floating-Point Aritmatika nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp Hak Cipta 1985 oleh Institute of Electrical and Electronics Engineers, Inc 345 East 47th Street, New York, NY 10017, USA Standar berisi 23 halaman teks dalam 7 bagian dan satu lampiran: 1.Scope 1.1 Tujuan Pelaksanaan 1.2 Inklusi 1.3 Pengecualian 2.Definisi 3.Formats 3.1 Kumpulan Nilai 3.2 Format Dasar 3.3 Format Extended 3.4 Kombinasi Format 4.Rounding () 4.1 Round Untuk Terdekat 4.2 Sutradara Roundings 4.3 Pembulatan Presisi 5.Operations 5.1 Aritmatika 5.2 Square Root 5.3 Konversi Floating-Point Format 5.4 Konversi Antara Floating-Point dan Integer Format 5.5 Round Floating-Point Number to Integer Value 5.6 Konversi Desimal Biner 5.7 Perbandingan 6.Infinity, NaNs, dan Signed Zero 6.1 Infinity Arithmetic 6.2 Operasi dengan NaNs 6.3 Bit Tanda 7.Exceptions 7.1 Operasi Tidak Valid 7.2 Divisi oleh Zero 7.3 Overflow 7.4 Unde Rflow 7.5 Inexact 8.Traps 8.1 Perangkap Handler 8.2 Precedence A. Fungsi dan Predikat yang Diperkirakan nbsp nbsp nbsp nbspSayangnya, IEEE telah berevolusi dari organisasi teknik publik internasional (yang pada awalnya) merupakan organisasi perdagangan. Organisasi ini memiliki hak cipta untuk menerbitkan standar IEEE754-1985. Jadi jika ingin membaca, dengan standar aslinya, Anda harus membelinya sekitar 80. Namun, undang-undang Rusia mengizinkan saya mengomentari mengajarkan standar ini. Oleh karena itu, Ill lebih lanjut memberikan presentasi standar yang sewenang-wenang dan mengungkapkan pendapat mereka tentang hal itu untuk tujuan pelatihan. Standar IEEE 754-1985 akan menentukan: Dinormalisasi sebagai bilangan floating point positif dan negatif Bagaimana merepresentasikan bilangan floating point denormalized positif dan negatif Bagaimana merepresentasikan jumlah nol Sebagai nilai khusus untuk merepresentasikan tak terhingga (Infiniti) Bagaimana cara merepresentasikan yang spesial? Nilai No number (NaN atau NaNs) Empat mode pembulatan IEEE 754-1985 mendefinisikan empat format untuk bilangan floating-point: presisi tunggal (presisi tunggal) presisi ganda 32-bit (double-precision) 64-bit Dengan single Presisi diperpanjang (presisi tunggal diperpanjang) 43 bit (jarang digunakan) Ketepatan diperpanjang ganda (presisi ganda) 79 bit (biasanya menggunakan 80 bit) 3. Konsep dasar dalam representasi bilangan floating point. 3.1 Penyampaian formulir eksponensial yang dinormalisasi. Ambil, misalnya, angka desimal 155.625 Bayangkan jumlahnya dalam bentuk eksponensial yang dinormalisasi: 1,55625872910 2 1,556258729exp 10 2 Nomor 1,556258729exp 10 2 terdiri dari dua bagian: mantissa M 1.55625 dan eksponen exp 10 2 Jika Mantissa berada di kisaran 1 -2. 3.2 Penyampaian formulir eksponensial denormalized. Ambil, misalnya angka desimal 155.625 Bayangkan jumlah cara eksponensial denormalized: 0,155625872910 3 0,1556258729exp 10 3 Nomor 0,1556258729exp 10 3 terdiri dari dua bagian: mantissa M 0,155625 dan eksponen exp 10 3 Jika Mantissa berada pada kisaran 0,1 -3. 3.3 Mengkonversi bilangan desimal menjadi bilangan biner floating-point. Masalah kita dikurangi menjadi angka floating point desimal dalam bilangan floating-point biner dalam bentuk normal eksponensial. Untuk melakukan ini, kami memperluas jumlah biner yang diberikan: 155,625 187292 7 087292 6 087292 5 187292 4 187292 3 087292 2 187292 1 187292 0 187292 -1 087292 -2 187292 -3 155,625 128 0 0 16 8 0 2 1 0,5 0 0.125 155,625 10 10011011,101 2 - jumlah desimal dan biner floating-point Biarkan bilangan yang dihasilkan ke bentuk yang dinormalisasi dalam sistem desimal dan biner: 1.556258729exp 10 2 1.0011111188292 2 exp Sebagai akibatnya, kita memiliki komponen utama dari Eksponensial bilangan biner yang dinormalisasi: Mantissa M1.0011011101 Exponen exp 2 111 4. Deskripsi mengubah bilangan IEEE 754. 4.1 Transformasi bilangan biner yang dinormalisasi dalam format 32 bit IEEE 754 Aplikasi utama dalam format teknologi dan pemrograman adalah 32 dan 64 Bit. Misalnya di VB menggunakan tipe data single (32 bit) dan double (64 bit). Perhatikan transformasi bilangan biner 10011011.101 format single-precision (32 bit) Standar IEEE 754. Format lain dari angka di IEEE 754 adalah salinan yang diperbesar dari presisi tunggal. Untuk memberikan nomor dalam format single-precision IEEE 754 harus membawanya ke binary normalised form. Pada 3, kami telah melakukan konversi ini pada nomor 155.625. Sekarang perhatikan, sebagai bilangan biner yang dinormalisasi diubah menjadi format 32-bit, IEEE 754 Deskripsi transformasi dalam format 32-bit IEEE 754: Nomor dapat berupa atau -. Oleh karena itu mainkan sedikit untuk menunjuk tanda: 0-positive 1-negative Ini bit yang paling signifikan untuk urutan 32 bit. Kemudian pergi bit eksponen, ini mengalokasikan 1 byte (8 bit). Peserta mungkin, seperti nomornya, dengan tanda atau -. Untuk menentukan tanda eksponen, jangan sampai mengenalkan bit tanda lagi, tambahkan offset ke eksponen dalam half byte 127 (0111 1111). Yaitu, jika pameran kami 7 (111 dalam biner), kemudian bergeser eksponen 7 127 134. Dan jika peserta pameran kami adalah -7, maka offset Bilik 127-7 120. Eksponen bias ditulis dalam 8 bit yang diberikan. Namun, ketika kita perlu mendapatkan bilangan biner eksponensial, kita cukup mengurangi 127 dari byte ini. Sisanya 23 bit disisihkan untuk mantissa. Namun, bit pertama biner mantissa yang dinormalisasi selalu 1, karena jumlahnya ada di kisaran 1 Tabel menunjukkan angka desimal 155.625 dalam format 32-bit IEEE754: 001 1011 1010 0000 0000 0000 2 971 87761,99584e292 Dari contoh di atas, Mengingat bahwa sebagian besar angka dalam format IEEE754 memiliki kesalahan relatif kecil yang stabil: Kesalahan relatif maksimum yang mungkin terjadi untuk nomor adalah Single 2 -23 100 11,920928955078125e-6 Kemungkinan kesalahan relatif maksimum untuk jumlah Double 2 -52 100 2.2204460492503130808472633361816e-14 7.5 Informasi umum untuk jumlah standar IEEE presisi tunggal dan ganda 754. Tabel 3. Informasi tentang format 3264 bit pada nomor standar ANSI IEEE Std 754-1985 standar, bit mengimbangi bit eksponensial (E), bit Sisa mantissa (M), bit yang dinormalkan bilangan biner bilangan biner yang dinormalisasi yang dinormalkan bilangan desimal F (-1) S 87292 (E -126) 8729 M2 23 F (-1) S 87292 (E -1022) 8729M2 52 dinormalisasi Jumlah desimal F (-1) S 87292 (E-12 7) 8729 (1 M2 23) F (-1) S 87292 (E-1023) 8729 (1M2 52) Abs. Maks. Nomor kesalahan Rel. Maks. Kesalahan denmark Nomor Rel. Maks. Norma kesalahan Nomor 2 -149 8776 1,401298468729e -45 2 -1074 8776 4,940656468729e -324 2 127 8729 (2-2 -23) 8776 3,402823478729e 38 2 1023 8729 (2-2 -52) 8776 1,797693138729e 308 8 Angka pembulatan pada standar IEEE 754. Dalam menyajikan bilangan floating-point di IEEE Standard 754 sudah sering membulat jumlahnya. Standar ini menyediakan empat cara untuk pembulatan angka. Cara pembulatan nomor IEEE 754: Pembulatan cenderung ke bilangan bulat terdekat. Pembulatan cenderung nol. Pembulatan cenderung ke 8734 Pembulatan cenderung -8734 Tabel 3. Contoh pembulatan ke satu desimal ke bilangan bulat terdekat Bagaimana pembulatan ditunjukkan pada contoh pada Tabel 3. Bila Anda mengubah nomor untuk memilih salah satu cara pembulatan. Secara default, ini adalah cara pertama, membulatkan ke bilangan bulat terdekat. Seringkali di perangkat yang berbeda menggunakan metode kedua - dibulatkan menjadi nol. Saat membulatkan ke nol, cukup membuang angka level yang tidak berarti, jadi ini yang paling mudah dalam implementasi perangkat keras. 9. Komputasi yang disebabkan masalah dengan menggunakan standar IEEE754. Standar IEEE 754 banyak digunakan dalam rekayasa dan pemrograman. Kebanyakan mikroprosesor modern diproduksi dengan realisasi perangkat keras dari representasi variabel nyata dalam format IEEE754. Bahasa pemrogram dan pemrogram tidak bisa mengubah situasi ini, sebuah repose bilangan real di mikroprosesor tidak ada. Saat membuat representasi standar IEEE754-1985 dari variabel riil berupa 4 atau 8 byte nampaknya bernilai sangat besar, karena jumlah RAM MS-DOS sama dengan 1 MB. Sebuah program dalam sistem ini hanya bisa digunakan 0,64 MB. Untuk sistem operasi modern ukuran 8 byte adalah null dan void, namun demikian variabel dalam kebanyakan mikroprosesor terus berada dalam format IEEE754-1985. Pertimbangkan kesalahan komputasi, yang disebabkan oleh penggunaan angka dalam format IEEE754 9.1 Kesalahan yang terkait dengan akurasi representasi bilangan real dalam format IEEE754. Sebuah pengurangan yang berbahaya. Kesalahan ini selalu hadir dalam perhitungan komputer. Alasan kemunculannya dijelaskan pada paragraf 7.4. -6 untuk double 10 -14 Kesalahan absolut bisa signifikan, seperti untuk single 10 31 dan untuk double 10 292, yang dapat menyebabkan masalah dengan perhitungan. Jika jumlah sampel di atas kertas, jawabannya adalah 1. Kesalahan absolut adalah 7. Mengapa mendapatkan jawaban yang salah Nomor 123456789 pada laporan kesalahan absolut tunggal 4CEB79A3hex (ieee) 123456792 (dec) adalah 3 Nomor 123456788 pada single 4CEB79A2hex (IEEE) 123456784 (dec) pelaporan kesalahan absolut adalah -4 Kesalahan relatif pada jumlah awal sekitar 3,24 e-6 Akibatnya, satu kesalahan relatif operasi dari hasil adalah 800, yaitu meningkat sebesar 2,5 e 8 kali. Inilah yang saya sebut sebagai pengurangan yang berbahaya. Yaitu penurunan akurasi bencana dalam operasi dimana nilai absolut hasilnya jauh lebih kecil daripada variabel input lainnya. Sebenarnya, ketepatan kesalahan representasi perhitungan komputer yang paling tidak berbahaya, dan biasanya banyak programmer tidak memperhatikannya. Meski demikian, mereka bisa sangat frustasi. 9.2 Kesalahan yang terkait dengan pemaksaan jenis data yang tidak semestinya. Asli dalam Inggris Kesalahan ini disebabkan oleh fakta bahwa nomor asli yang dikirimkan dalam format single dan double dalam format biasanya tidak sama satu sama lain. Sebagai contoh: nomor asli 123456789,123456789 Single: 4CEB79A3 123456792,0 (dec) Ganda: 419D6F34547E6B75 123456789,12345679104328155517578125 Perbedaan antara jumlah Tunggal dan Ganda: 2,87654320895671844482421875 Berikut adalah contoh untuk VB: Kesalahan relatif dari hasilnya adalah: 8734 (Tak terhingga) Kesalahan ini disebut nol kotor. Jika variabel mengarah ke tipe yang sama, maka kesalahan ini tidak akan terjadi. Oleh karena itu, variabel dan hasil perhitungan intermediate dibawa ke tipe data yang sama. Misalnya, persyaratan untuk menunjukkan jenis yang sama yang dijelaskan dalam bahasa C standar ke ISO IEC 9899: 1999. Perhatikan fakta bahwa tidak cukup hanya untuk membawa semua data asli ke satu tipe saja. Diperlukan untuk membawa hasil operasi menengah ke jenis yang sama. Berikut adalah contoh kesalahan pada hasil antara: Di sini kesalahan muncul karena hasil antara 1 3 pada baris c c-1 3 akan bertipe double, tidak tunggal. Untuk menyingkirkan kesalahan Anda harus memberikan hasil antara dengan jenis operator tunggal menggunakan cast CSng. Contoh untuk membawa tipe data untuk GNU C, dikirim oleh Gregory Sitkarevym: Pada versi kedua Anda dapat melihat bahwa pembagian konstanta dalam hasil menengah diberikan pada tipe float (presisi tunggal dalam C). Pilihan ini dikompilasi dan dieksekusi menggunakan GNU C. Jika Anda mengkompilasi dan menjalankan opsi di atas ditunjukkan pada VC (Visual Studio), hasilnya akan dibalik. Artinya, pilihan 2 akan menjadi hasil dari -9,934108, dan opsi 1 Hasil: 0.000000. Oleh karena itu dapat disimpulkan kesimpulan bahwa hasil perhitungan mungkin tergantung pada tipe dan versi kompiler. Dalam kasus ini, kita dapat mengasumsikan bahwa kompiler VC secara otomatis memberi jenis variabel, dan usaha untuk secara paksa membawa tipe yang sama gagal. Jika Option 1 (tanpa pemeran) bertemu dengan variable double-precision (double), maka error tidak akan membawa data dan Result 0.000000 Jadi dalam kebanyakan kasus untuk menyingkirkan data cast hanyalah dengan menggunakan tipe data double dan forget. Tentang tipe single (float). Kesalahan komputasional yang disebabkan oleh tidak membawa jenis data yang saya sebut sebagai kesalahan liar karena berhubungan dengan ketidaktahuan akan standar dan teori pemrograman (yaitu, dengan pendidikan dasar yang buruk) 9.3 Kesalahan yang disebabkan oleh pergeseran mantissa. Lubang melingkar. Kesalahan ini terkait dengan hilangnya keakuratan hasil pada bilangan persimpangan mantis yang tidak lengkap pada sumbu sebenarnya. Jika bilangan mantissa tidak berpotongan pada poros sungguhan, maka penambahan dan pengurangan antara angka-angka ini tidak mungkin dilakukan. Sebagai contoh, kita mengambil jumlah Single: 47FFFFFF 131071,9921875 (dec) Dalam sistem biner, nomor ini terlihat seperti: 11111111111111111,1111111 Kami menunjukkan beberapa operasi komputer tambahan, dan nomor ini dalam format digit Significant Single di Mantissa dari bilangan biner dalam format Single tidak lebih dari 24 Red menunjukkan angka di luar batas ini dan tidak dilibatkan dalam format Single 1. Selain itu dengan nomor yang sama (error shift 0.0). 2. Selain jumlah 2 kali lipat lebih kecil (error shift - 0.00390625). 3. penambahan dengan jumlah yang lebih kecil 2 23 kali (error shift - 0.007812). 4. penambahan dengan jumlah yang lebih kecil 2 24 kali (error shift - 0.007812). Dalam kasus terakhir, mantissa nomor dipisahkan, dan operasi aritmatika dengan angka-angka ini tidak ada artinya. Seperti yang bisa dilihat dari contoh pergeseran error di atas terjadi jika angka normalisasi awal berbeda eksponennya. Jika jumlahnya berbeda lebih dari 2 23 (untuk single) dan 2 52 (untuk double), maka penambahan dan pengurangan antara angka-angka ini tidak mungkin dilakukan. Hasil kesalahan relatif maksimum dari operasi adalah sekitar 5,96 e-6, yang tidak melebihi kesalahan relatif dari representasi nomor (hal.9.1). Meskipun kesalahan relatif di sini baik-baik saja, ada masalah lain. Pertama, bekerja dengan angka hanya dalam kisaran sempit sumbu sebenarnya, di mana mantissa berpotongan. Kedua, untuk setiap sumber batas lingkaran yang disebut lubang siklik. Mari saya jelaskan, jika ada siklus di mana nomor asli ditambahkan ke jumlahnya, ada batas numerik jumlah untuk nomor ini. Artinya, jumlah yang mencapai ukuran tertentu berhenti meningkat dengan menambahkannya ke nomor aslinya. Berikut adalah contoh lubang siklik pada sistem kontrol otomatis: Ada pabrik farmasi yang memproduksi tablet seberat 10 mg. Terdiri dari: mesin pembentuk, tangki penyimpanan 500 kg, mesin kemasan, sistem kontrol otomatis. Mesin cetakan memberi makan ke dalam bunker pada 10 tablet sekaligus. Mesin pengisi mengambil satu pil. Sistem kontrol otomatis memperhitungkan tablet yang diterima di gerbong mesin cetak dan dibawa keluar dari mesin kemasan bunker. Artinya, ada sebuah program yang menunjukkan produksi hopper mengisi dalam kg. Bila di bunker akan lebih dari 500 kg produk mesin cetak berdiri pada saat istirahat, itu termasuk kode di bunker yang akan menjadi 200 kg produk. Mengisi mesin untuk berhenti jika bunker kurang dari 10 pound dan akan mulai saat bunker akan lebih dari 100 kg produk. Kedua mobil bisa berhenti dari waktu ke waktu untuk melayani, tidak tergantung satu sama lain (berkat bungker). Berikut adalah contoh lubang siklik pada sistem kontrol otomatis: Ada pabrik farmasi yang memproduksi tablet seberat 10 mg. Terdiri dari: mesin pembentuk, tangki penyimpanan 500 kg, mesin pengemas, seperti yang Anda tahu, bekerja dalam lingkaran tak berujung. Misalkan satu hari mengisi mesin berdiri terlalu lama dan sebuah bungker diisi dengan sampai 300 kg. Apa yang terjadi setelah saya menyalakannya Contoh yang disederhanakan dari manajemen siklus program: Dalam contoh ini, mesin mengisi diambil dari hopper 100 kg produk, dan berat produk di hopper tidak berubah. Mengapa tidak berubah Karena mantissa nomor 300 dan 0.00001 menguraikan format single. Selanjutnya, bawa bobot gerbong mesin cetak ke 500 kg dan berhenti. Mesin pengisi akan mengambil semua tablet dari hopper dan juga berhenti. Program ini akan menunjukkan bobot 500kg di bunker. Ayo jalankan spesialis, uji sensor, kabel, komputer, dan katakan bahwa program itu digantung. Tapi programnya tidak hang, terus berjalan lancar dan setiap cek akan mengkonfirmasi hal ini. Cukup jumlah 0.0001 yang tertabrak di lubang siklik dan muncul dari situ tidak bisa. Akibatnya, kami beruntung karena itu adalah pabrik farmasi, bukan GES Sayan-Shushenskaya. Sebenarnya, seorang pemrogram berpengalaman tidak akan pernah membuat pengurangan siklis (atau penjumlahan) dengan cara ini. Contoh ini adalah tujuan fiktif, dan karenanya tidak bisa dipertimbangkan, meski dalam hal matematika semuanya sempurna. Kesalahan ini khas matematikawan dan pemrogram pemula. Saya akan mengatakan bahwa pekerjaan utama programmer adalah berjuang dengan kesalahan, tapi tidak dalam solusi matematis untuk masalah ini. Berikut adalah contoh solusi yang tepat untuk masalah ini, courtesy of Sitkarevym Gregory: Contoh sebelumnya diambil dari paket industri nyata. Untuk kejelasan, kami menyederhanakan contoh di atas. Seperti dapat dilihat dari contoh ini, pemrogram harus menghitung kesalahan hasil pada setiap siklus, untuk memperhitungkannya pada siklus berikutnya. Perhatikan bahwa pemrogram harus benar-benar siap untuk membuat beberapa konsep dasar matematika tidak dapat dipuaskan dalam perhitungan dalam format IEEE754. Misalnya, aturan komutativitas aljabar (a b) a (a c) b, biasanya tidak dilakukan dalam perhitungan ini. Sayangnya, di todays pendidikan dasar yang mendapat sedikit perhatian. 9.4 Kesalahan karena pembulatan. Kotor nol. Bila perhitungan komputer bisa membedakan dua jenis pembulatan: 1. Hasil operasi aritmatika selalu dibulatkan. 2. Output dan masukan bilangan real di kotak Windows dibulatkan. Dalam kasus pertama, variabel dibulatkan ke salah satu dari 4 jenis pembulatan IEEE754, pembulatan default terjadi pada bilangan bulat terdekat. Dalam kasus ini, variabel menerima nilai bulat baru. Pada p.9.2 kita mempertimbangkan penambahan dua bilangan yang identik: 1. Penambahan dengan nomor yang sama (pergeseran kesalahan 0.0). Berikut hasil penambahan dua angka yang benar-benar akurat, namun hasilnya dibulatkan oleh mikroprosesor. Jadi, untuk hasil pasti telah ditambahkan ke kesalahan pembulatan. Secara umum, kesalahan pembulatan ada dalam keakuratan angka. Dalam kasus kedua, variabel tidak mengubah artinya, hanya di jendela Windows menampilkan nilai bulat bilangan real. Ternyata variabel asli dan menampilkannya di Windows adalah nomor yang berbeda. Ini bukan kesalahan format IEEE754, ini adalah bug Windows. Variabel tunggal yang ditampilkan di angka 7 Windows 7 dibulatkan ke bilangan bulat terdekat. Kotak 3DFCD6EA 0,12345679104328155517578125 ditampilkan sebagai 0,1234568 Untuk variabel tipe Double ke kotak Windows menampilkan 15 digit signifikan dibulatkan ke bilangan bulat terdekat. 3FBF9ADD3746F67D 0,12345678901234609370352046653351862914860248565673828125 ditampilkan sebagai 0,123456789012346 Pertanyaan tentang betapa pentingnya variabel ketika kita masuk ke jendela Windows 0,123456789012346 Nilai ini akan sama dengan nomor ini: 3FBF9ADD3746F676 0,1234567890123459965590058118323213420808315277099609375 Artinya, nilai 3FBF9ADD3746F67D kita umumnya tidak bisa memasukkan langsung ke Kode program Tapi kita bisa menipu dan menempelkannya ke x 0.123456789012346 1 E-16. Variabel yang dihasilkan akan sama dengan 3FBF9ADD3746F67D (ini digunakan pada contoh nol kotor) Display atau ke PC melalui jendela adalah nomor yang tidak mungkin. Akibat tindakan Windows muncul sejumlah situasi yang tidak menyenangkan. 1. Anda tidak memiliki kemampuan teknis untuk menampilkan atau memasukkan nilai yang sebenarnya. Dari variabel di jendela, yang dengan sendirinya sangat menyedihkan. 2. Munculnya kesalahan serius, seperti kotor nol. Nol kotor adalah ketika Anda atau program mengasumsikan bahwa variabel tidak sama dengan nol nol Biasanya, kesalahan ini terjadi pada antarmuka operator mesin. Misalnya, setelah mengatur ulang berat kemasan program. Hasil dari program pada contoh di atas Akibatnya, variabel yang dianggap operator nol nol tidak sama. Relatif kesalahan hasilnya adalah tak terhingga. Dalam operasi perbandingan logis yang tidak nol dapat mengalihkan eksekusi program ke cabang algoritma lainnya. 9.5 Tingkat kesalahan pada bilangan normadenorma. Jumlah pembunuh. Kesalahan ini terjadi saat bekerja dengan nomor yang terletak di perbatasan representasi bilangan denormalized yang dinormalisasi. Mereka terkait dengan perbedaan representasi angka dalam format IEEE754 dan mentransfer rumus perbedaan dalam format IEEE754 bilangan real. Artinya, perangkat (atau perangkat lunak) harus menggunakan algoritma yang berbeda tergantung pada posisi bilangan real pada format angka. Selain itu, ini menyebabkan komplikasi perangkat dan algoritma, masih ada ketidakpastian zona transisi. Ketidakpastian zona transisi adalah bahwa standar tersebut tidak menentukan nilai spesifik dari batas transisi. Pada intinya, batas transisi antara dua bilangan real: terakhir denormalized nomor 000FFFFFFFFFFFFF: nilai desimal Akurat dari nomor ini: 2,2250738585072008890245868760858598876504231122409594654935248025624400092282356951787758888037591552642309780950 4343120858773871583572918219930202943792242235598198275012420417889695713117910822610439719796040004548973919380791 9893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910508020181592 6642134996606517803095075913058719846423906068637102005108723282784678843631944515866135041223479014792369585208321 5976210663754016137365830441936037147783553066828345356340050740730401356029680463759185831631242245215992625464943 0083685186171942241764645513713542013221703137049658321015465406803539741790602258950302350193751977303094576317321 0852507299305089761582519159720757232455434770912461317493580281734466552734375e-308 dan jumlah normalisasi pertama 0010000000000000: va desimal Akurat lue dari nomor ini: 2,2250738585072013830902327173324040642192159804623318305533274168872044348139181958542831590125110205640673397310 3581100515243416155346010885601238537771882113077799353200233047961014744258363607192156504694250373420837525080665 0616658158948720491179968591639648500635908770118304874799780887753749949451580451605050915399856582470818645113537 9358049921159810857660519924333521143523901487956996095912888916029926415110634663133936634775865130293717620473256 3178148566435087212282863764204484681140761391147706280168985324411002416144742161856716615054015428508471675290190 3161322778896729707373123334086988983175067838846926092773977972858659654941091369095406136467568702398678315290680 984617210924625396728515625e-308 Sejak batas adalah bilangan real, presisi dapat diatur hingga tak terbatas dan perangkat digital atau program mungkin tidak memiliki sedikit untuk keputusan untuk memasukkan beberapa jangkauan jumlah. Sebagai contoh, sebuah bug 53632 untuk PHP, yang menyebabkan kepanikan di awal tahun 2011 ltfp dtfp d 2.2250738585072011e-308 gt end ltbobygt lthtmlgt Masukkan nomor 2.2250738585072011e-308 menyebabkan terpautnya proses dengan hampir 100 CPU load. Nomor lain dari rangkaian masalah ini tidak disebabkan (2.2250738585072009e-308, 2.2250738585072010e-308, 2.2250738585072012e-308) Laporkan bug yang diterima 30.12.2010, 10.01.2011 yang diperbaiki oleh pengembang. Karena PHP adalah preprocessor yang digunakan oleh kebanyakan server, maka setiap jaringan pengguna dalam waktu 10 hari, bisa menutup host apapun. Bagaimana menulis pengembang bahwa bug itu hanya bekerja pada sistem 32-bit, tapi jika Anda meningkatkan keakuratan batas, maka saya berpikir bahwa sistem 64-bit juga menggantung (tidak diverifikasi). Alasan kepanikannya jelas: setiap pengguna, pada tingkat ketekunan dan pengetahuan tertentu, memiliki kesempatan untuk mengurangi sebagian besar sumber informasi planet ini dalam waktu sepuluh hari. Saya tidak suka - akan menghasilkan lebih banyak contoh angka dan kesalahan semacam itu. 10 Bagian terakhir Dari sini jelas bahwa pandangan bahwa hasil floating-point tidak melampaui kesalahan relatif dalam melaporkan jumlah terbesar adalah false. Kesalahan yang tercantum dalam Butir 9 ditambahkan bersamaan. Kesalahan seperti pengurangan nol yang kotor dan berbahaya bisa membuat kesalahan perhitungan tidak dapat diterima. Perhatian khusus dalam pemrograman perhitungan komputer pemrogram harus dibayar ke hasil mendekati nol. Beberapa ahli percaya bahwa format angka merupakan ancaman bagi kemanusiaan. Anda bisa membacanya di artikel IEEE754-tick yang mengancam manusia Meskipun banyak fakta dalam artikel ini terlalu didramatisir, dan mungkin disalahartikan, tapi masalahnya adalah komputasi tercermin dengan benar secara filosofis. Im tidak dramatisasi perhitungan pada standar IEEE754. Standar beroperasi sejak tahun 1985 dan sepenuhnya masuk ke standar IEEE754-2008, yang memperluas keakuratan perhitungan. Namun, masalah keandalan komputasi saat ini sangat mendesak, dan rekomendasi standar IEEE754-2008 dan ISO belum memecahkan masalah ini. Menurut saya di bidang ini diperlukan sebuah ide inovatif yang tidak dimiliki oleh Standard IEEE754-2008. Ide inovatif biasanya datang dari. Ide inovatif utama di dunia kita dibuat oleh amatir (orang yang tidak berpikiran sama dengan uang). Contoh mencolok dari situasi ini adalah penemuan telepon. Ketika seorang guru sekolah Alexander Graham Bell (Alexander Graham Bell) mengemukakan sebuah paten untuk penemuan telepon kepada presiden perusahaan telekomunikasi Western Union Company, yang dimiliki oleh koneksi kabel transatlantik dengan tawaran untuk membeli hak patennya untuk Penemuan telepon, dia tidak diusir - tidak. Presiden perusahaan tersebut menawarkan untuk mempertimbangkan pertanyaan ini saran para ahli di bidang telegrafi, yang terdiri dari spesialis dan ilmuwan di bidang telekomunikasi. Para ahli berpendapat bahwa penemuan ini tidak ada gunanya di bidang telekomunikasi dan ini sia-sia belaka. Beberapa ahli bahkan telah menulis sebuah laporan bahwa mereka mengetahui dan mencontoh naif Alexander Graham Bell, bersama dengan mertuanya, memutuskan untuk mempromosikan penemuannya secara independen. Setelah sekitar 10 tahun, raksasa telekomunikasi Western Union Co. hampir menghilangkan bisnis telepon dari ranah teknologi telekomunikasi. Hari ini Anda bisa melihat di banyak jendela kota Rusia yang mengatakan Western Union, perusahaan ini yang bergerak dalam mentransfer uang ke seluruh dunia, dan begitu dia menjadi raksasa telekomunikasi internasional. Kita dapat menyimpulkan: pendapat para ahli dalam teknologi inovatif tidak ada gunanya Jika Anda berpikir bahwa sejak ditemukannya telepon (1877) di masyarakat, pikiran bahwa ada sesuatu yang berubah, salah Anda salah. Jika ilmuwan (yang baru menemukan) dan profesional (yang tahu bagaimana cara menggunakan yang terkenal) tidak bisa menyelesaikan masalah, Anda memerlukan inovasi. Tautan ke ide baru di bidang representasi bilangan real di perangkat keras: 1. Approksimetika 2. Jika Anda tahu ide inovatif lainnya di bidang representasi bilangan real, maka kita akan dengan senang hati mendapatkan link ke sumber-sumber ini. Saya menyarankan untuk mewakili bilangan real sebagai fixed-point. Untuk melihat keseluruhan angka cukup dua untuk memiliki variabel yang terdiri dari bilangan bulat 1075 bit dan 1075 bit bagian pecahan, yaitu sekitar 270 byte per variabel. Dalam hal ini, semua angka akan disajikan dengan akurasi absolut yang sama. Anda dapat bekerja dengan angka di seluruh rentang sumbu sebenarnya, yaitu, menjadi mungkin untuk merangkum sejumlah besar bilangan kecil. Langkah angka pada sumbu sebenarnya adalah seragam, yaitu sumbu sebenarnya yang linier. Tipe data hanya satu, yaitu tidak memerlukan keseluruhan, tipe nyata dan lainnya. Di sini masalahnya adalah realisasi daftar dimensi mikroprosesor 270 byte, namun bukan masalah bagi teknologi modern. Untuk menulis p.9 saya harus membuat sebuah program yang mewakili angka sebagai variabel ke titik tetap, panjang 1075.1075 byte. Dimana jumlahnya bisa diwakili sebagai string karakter ASCII, yaitu satu simbol sama dengan satu digit. Baru saja harus menulis semua operasi aritmatika dengan senar ASCII. Program ini mirip dengan perhitungan kertas. Karena mikroprosesor kemampuan matematika di dalamnya tidak digunakan, katanya perlahan. Mengapa saya melakukannya, saya tidak dapat menemukan program yang secara akurat mewakili jumlah format IEEE754, dalam bentuk desimal. Saya juga tidak menemukan programnya (walaupun mereka pasti memiliki apa yang tidak diragukan lagi) di mana Anda bisa masuk dalam kotak 1075 dari angka desimal yang signifikan. Berikut misalnya hanya nilai desimal dari jumlah 7FEFFFFFFFFFFFFF ganda: 17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955 863276687817154045895351438246423432132688946418276846754670353751698604991057655128207624 549009038932894407586850845513394230458323690322294816580855933212334827479782620414472316 8738177180919299881250404026184124858368,0 Anda dapat menggunakan IEEE754 v.1.0 nbsp untuk mempelajari dan mengevaluasi kesalahan ketika bekerja dengan bilangan real yang diberikan dalam format IEEE754. Referensi: 1. Standar IEEE untuk Aritmatika Floating-Point Biner. Copyright 1985 oleh The Institute of Electrical and Electronics Engineers, Inc 345 East 47th Street, New York, NY 10017, Amerika Serikat Ucapan Terima Kasih: Sitkarevu Grigory (sitkarevkomitex. ru, sinclair80gmail). Untuk bantuan dalam membuat artikel. Archive of reviews with comments nbsp View nbspnbsp (Send us feedback on the e-mail: infosoftelectro. ru )Binary Conversion Notes These notes include more information than is needed for MGF 1107. MGF 1107 students can ignore everything about binary fractions, the binary version of scientific notation, and hexadecimal numbers when reading what follows. We only use binary integers in MGF 1107. Binary to Decimal Conversion This is done by applying the definition of the place values for a binary number, evaluating each one in base ten. For example, we convert 1001 two from binary to decimal as follows: which is 9 ten . Most people find this to be the easiest of the two conversions. Fractions are handled with negative exponents for each fractional place value, just as with decimal numbers, so we convert 0.11 two from binary to decimal by recognizing that gives 0.75 ten . MGF 1107 homework does not include examples with binary fractions. Decimal to Binary Conversion The integer part is obtained (working from right to left) by repeated division by two (which shifts the binary-point to the left), keeping the remainder as the next binary digit and using the integer quotient for the next step. We stop when the quotient is zero. ( The easiest way to get the integer part is to use the Hex conversion feature of a calculator and convert hexadecimal to binary, but we are not using calculators in this unit. ) The fractional part is obtained (now working from left to right) by repeated multiplication by two (which shifts the binary-point to the right), keeping the integer part as the next binary digit and using the fractional part for the next step. There are no easy shortcuts for the fractional part, but watch for any repeating pattern. We can write the result as a normalized floating-point binary number with the convention that the mantissa (the significand) is between 1 and 2 -- that is, the mantissa is of the form 1.ffffff. 1. Convert 11 ten to binary: The integer is converted by and is 1011 two . (This is 1.011 x 2 3 as a normalized floating-point number.) 2. Convert 5.75 ten to binary: The integer part is found by and is 101 two . The fractional part is found by so the number is 101.11 two . (This is 1.0111 x 2 2 as a normalized floating-point number.) 3. Convert 0.1 ten to binary: The fractional part is found by so the number is 0.0001100110011. two (This is 1.10011001. x 2 -4 as a normalized floating-point number.) Hexadecimal Numbers Decimal - Hexadecimal - Binary Table Way back in the 1950s, the ILLIAC was built at the University of Illinois (Urbana-Champaign) using the sexadecimal number system. However, they counted. 8, 9, K, S, N, J, F, L instead of using. 8, 9, A, B, C, D, E, F as we do today. They chose those letters (which were remembered using the mnemonic K ing S ized N umbers J ust F or L aughs) because they proved the most convenient ones when they converted a teletype to be used for punching the paper tape used for IO. (This info from J. Sutherland Frame, professor emeritus of Mathematics at Michigan State University, an early programmer of the 1957 clone of the ILLIAC known as MISTIC. both of which are in the ORDVAC family of computers.) (An aside: Fans of 2001: A Space Odyssey will recall that the HAL-9000 computer was built in Champaign-Urbana. This reflects the historic role the Univ. of Illinois had in the early development of computers with the construction of the ILLIAC. In addition, although Everyone knows that HAL is rot25 of IBM, the serial number reflects the sequence used by Control Data, whose 6000 series machines were the supercomputer in the mid-60s when 2001 was made. The Cray-1 would have been an 8000 series machine, but CDC chose the Star design that led to the Cyber-205 and Cray formed his own company. Kubrick guessed about right in placing a 9000 series machine that could talk in the early 90s - HAL was born on 11292 - but someone forgot the mouse.) This material is 169 Copyright 2000, by James Carr. Displaying IEEE Doubles in Binary Scientific Notation By Rick Regan emspJuly 1st, 2010 An IEEE double-precision floating-point number, or double, is a 64-bit encoding of a rational number. Internally, the 64 bits are broken into three fields: a 1-bit sign field, which represents positive or negative an 11-bit exponent field, which represents a power of two and a 52-bit fraction field, which represents the significant bits of the number. These three fields 8212 together with an implicit leading 1 bit 8212 represent a number in binary scientific notation, with 1 to 53 bits of precision. For example, consider the decimal number 33.75. It converts to a double with a sign field of 0, an exponent field of 10000000100, and a fraction field of 0000111000000000000000000000000000000000000000000000. The 0 in the sign field means it8217s a positive number (1 would mean it8217s negative). The value of 10000000100 in the exponent field, which equals 1028 in decimal, means the exponent of the power of two is 5 (the exponent field value is offset, or biased, by 1023). The fraction field, when prefixed with an implicit leading 1, represents the binary fraction 1.0000111. Written in normalized binary scientific notation 8212 following the convention that the fraction is written in binary and the power of two is written in decimal 8212 33.75 equals 1.0000111 x 2 5 . In this article, I8217ll show you the C function I wrote to display a double in normalized binary scientific notation. This function is useful, for example, when verifying that decimal to floating-point conversions are correctly rounded . Subnormal Numbers In double-precision floating-point, most numbers are represented in normalized form, with an implicit 1 bit giving 53 bits of precision. However, very small numbers 8212 the so-called subnormal numbers 8212 are represented in unnormalized form, with no implicit leading 1 bit and zero to 51 leading zeros of fraction field. These numbers are encoded with an exponent field of zero, with their true exponent equal to -1022 minus the location of the first 1 bit in their fraction field. This means that subnormal numbers are scaled by powers of two in the range 2 -1074 through 2 -1023. with accompanying precision of one to 52 bits. Although subnormal numbers are encoded as unnormalized, they can still be written as normalized. For example, the decimal number 1e-310 converts to a subnormal double with a sign field of 0, an exponent field of 00000000000, and a fraction field of 0000000100100110100010001011011100001110011000101011. This can be printed as 1.00100110100010001011011100001110011000101011 x 2 -1030 8212 which is what my C function does. I wrote a function called printdoublebinsci() that prints double-precision floating-point numbers in normalized binary scientific notation. It is based on a call to my function parsedouble(). which isolates the three fields of a double. I declared and defined this function in files I named binsci. h and binsci. c, respectively. Numbers that are not raised to a power are printed with the suffix ldquox 20rdquo. Not-a-number (NaN) and infinity values are not handled. Examples of Usage I wrote a program, called binsciTest. c, that shows some example calls to printdoublebinsci(): I compiled and ran it on both Windows and Linux: On Windows, I built a project in Visual C with files binsci. c, binsci. h, binsciTest. c, rawdouble. c, and rawdouble. h, and compiled and ran it in there. On Linux, I compiled with ldquogcc binsciTest. c binsci. c rawdouble. c - o binsciTestrdquo and then ran it with 8220.binsciTest8221. This is the Windows output (the Linux output is a little different Visual C and gcc differ in some of their decimal to floating-point conversions): Except for 33.75, which is exact, all the other examples are 53 significant bit approximations to the decimal numbers they stand in for (type lsquo0.1rsquo into my decimal to binary converter and see for yourself).

No comments:

Post a Comment