Anda sedang offline saat ini, menunggu internet Anda untuk menyambung kembali

Bagaimana untuk bekerja di sekitar masalah akurasi/perbandingan Floating-Point

PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.

Klik disini untuk melihat versi Inggris dari artikel ini:69333
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan “sebagaimana adanya” dan tidak akan diperbarui.
RINGKASAN
Untuk dapat diandalkan menguji apakah dua variabel floating-point atau ekspresisama (menggunakan IEEE format atau MBF), Anda harus mengurangi duavariabel dibandingkan dan menguji apakah perbedaan mereka adalah kurangdari nilai dipilih pada batas-batas penting untuk tunggal atau gandapresisi. TIDAK ADA TES UNTUK KESETARAAN AKAN DAPAT DIANDALKAN. Berikutrumus terpercaya menguji apakah x dan y adalah sama:

  1. Untuk single presisi, Anda harus menguji apakah perbedaan x dan Y adalah kurang dari nilai 7 angka yang signifikan lebih kecil daripada x atau Y. Membagi x atau y oleh 10 ^ 7 untuk menemukan nilai perbandingan. Misalnya:
          ' To try this example in VBDOS.EXE:      ' 1. From the File menu, choose New Project.      ' 2. Copy the code example to the Code window.      ' 3. Press F5 to run the program.      IF ABS(X! - Y!) <= (X! / 10^7) THEN         PRINT "Equal within 7 digits"      ENDIF						
  2. Untuk double presisi, Anda harus menguji apakah perbedaan x dan y adalah kurang dari nilai 15 angka yang signifikan lebih kecil daripada x atau Y. Membagi x atau y oleh 10 ^ 15 untuk menemukan nilai perbandingan. Misalnya:
          ' To try this example in VBDOS.EXE:      ' 1. From the File menu, choose New Project.      ' 2. Copy the code example to the Code window.      ' 3. Press F5 to run the program.      IF ABS(X# - Y#) <= (X# / 10^15) THEN         PRINT "Equal within 15 digits"      ENDIF						
IEEE floating-point format ditemukan dalam standar danProfessional edisi dari Microsoft Visual Basic untuk MS-DOS, versi1.0; di Microsoft QuickBasic untuk MS-DOS (QB87.EXE prosesor pembantu versihanya), versi 3.0, 4.0, 4.0b, dan 4,5; di Microsoft Basic Compiler untukMS-DOS dan MS OS/2, versi 6.0 dan 6.0b; dan dalam Microsoft BasicProfessional Development System (PDS) untuk MS-DOS dan MS OS/2, versi7.0 dan 7.1.

MBF (Microsoft biner Format) ditemukan dalam Microsoft QuickBasic untukMS-DOS (QB.EXE non-prosesor pembantu hanya versi), versi 1.0, 1.01 2.0,2.01, dan 3.0, dan Microsoft GW-Basic juru bahasa untuk MS-DOS, versi3.2, 3.22, dan 3.23.

Informasi di dalam artikel ini juga termasuk dalam berkas Bantuandisediakan dengan standar dan edisi profesional MicrosoftVisual Basic untuk MS-DOS, versi 1.0.
INFORMASI LEBIH LANJUT
Catatan: angka yang signifikan dalam beberapa dihitung dapat hilang karena berikut: beberapa perhitungan, terutama penambahan angka-angka yang jauh di nilai, atau pengurangan jumlah serupa di nilai. Ketika nomor hasil dari beberapa perhitungan, Anda dapat kebutuhan untuk mengubah Anda tes kesetaraan untuk menggunakan lebih sedikit yang signifikan digit untuk mencerminkan hilangnya matematika angka yang signifikan. Jika tes Anda penting menggunakan terlalu banyak angka yang signifikan, Anda mungkin gagal untuk menemukan bahwa angka-angka yang dibandingkan untuk kesetaraan yang benar-benar sama dalam batas mungkin akurasi.

Dalam produk dasar yang tercantum di atas bahwa menggunakan IEEE floating-point format,menengah perhitungan yang dilakukan di internal 64-bitsementara mendaftar, yang memiliki lebih banyak potongan-potongan akurasi daripada disimpan dalampresisi tunggal atau ganda presisi variabel. Ini sering mengakibatkanJika pernyataan kembali kesalahan yang menyatakan bahwa menengahperhitungan ini tidak sama dengan ekspresi dibandingkan. Misalnya:
   X = 25   Y = 60.1   IF 1502.5 = (X * Y) THEN PRINT "equal"				
Menjalankan kode di atas tidak akan mencetak "sama". Sebaliknya,Setelah metode menggunakan pengganti variabel akan mencetak "sama", tetapiadalah masih tidak terpercaya teknik sebagai tes untuk kesetaraan:
   Z = 25 * 60.1   IF 1502.5 = Z THEN PRINT "equal"				
Catatan yang eksplisit tipe numerik melemparkan (! untuk single presisi, # untukDouble presisi) akan mempengaruhi presisi di mana perhitungan yangdisimpan dan dicetak. Apapun tipe casting Anda lakukan, Anda mungkin masihLihat hasil pembulatan yang tidak diharapkan:
   PRINT 69.82! + 1    ' Single precision, prints 70.82.   PRINT 69.82# + 1    ' Double precision, prints 70.81999999999999.				
Untuk representasi numerik tepat desimal (basis 10), sepertiperhitungan dolar dan sen, Anda harus menggunakan mata uang (@)tipe data yang ditemukan dalam Visual Basic untuk MS-DOS, versi 1.0 dan dasar PDSuntuk MS-DOS, versi 7.0 dan 7.1. Mata uang data ketik persismenyimpan hingga 19 digit, dengan 4 digit setelah tempat desimal.

Referensi:

Standar IEEE dan MBF berusaha untuk menyeimbangkan akurasi danketepatan dengan kisaran numerik dan kecepatan. Ketepatan mengukur berapa banyakpotongan-potongan signifikan presisi tidak hilang dalam perhitungan. Presisimengacu pada jumlah bit di dalam mantissa, yang menentukan bagaimanabanyak angka desimal dapat diwakili.

IEEE format dan MBF menyimpan nomor 1.x bentuk untuk kekuatany (di mana x dan y adalah basis 2 nomor; x adalah dalam mantissa, dan yeksponen).

MBF presisi tunggal memiliki 24 bit mantissa, dan double presisi56 bit mantissa. Semua MBF perhitungan yang dilakukan dalam waktu hanya 24atau 56 bit.

Presisi tunggal IEEE memiliki 24 bit mantissa, dan double presisimemiliki 53 bit mantissa. Namun, semua presisi tunggal danDouble-precision IEEE perhitungan dalam Visual Basic untuk MS-DOS,Versi 1.0; dalam QuickBasic untuk MS-DOS, versi 3.0/4.x; dalam BasicKompiler untuk MS-DOS, versi 6.0, dan 6.0b; dan di dasar PDS untukMS-DOS, versi 7.0 dan 7.1re dilakukan dalam daftar sementara 64-bituntuk akurasi yang lebih besar. Sebagai hasilnya, IEEE perhitungan lebih akuratdari perhitungan MBF, meskipun MBF's kemampuan untuk mewakili bit lebih dalamDouble presisi.

Kebanyakan bilangan dalam notasi desimal (basis 10) tidak memiliki tepatrepresentasi dalam format penyimpanan floating-point ganda (basis 2)digunakan dalam tipe data presisi tunggal dan double-precision. IEEE keduaformat dan MBF tidak persis mewakili (dan harus melengkapi) semuaangka-angka yang tidak dari bentuk 1.x kekuatan y (di mana x dan yadalah basis 2 nomor). Angka-angka yang dapat direpresentasikan persismenyebar sangat beraneka ragam. Kepadatan tinggi representablenomor adalah dekat 1.0 dan-1.0, tetapi angka-angka sedikit representableterjadi sebagai nomor pergi ke 0 atau tak terhingga.

Batasan di atas sering menyebabkan dasar untuk kembali floating-pointhasil yang berbeda daripada yang Anda harapkan. Informasi lebih lanjut tentang initopik dapat ditemukan di dalam Basis Pengetahuan Microsoft dengan query padakata-kata berikut:
mengambang dan titik dan format dan QuickBasic
Format titik mengambang IEEE didokumentasikan dalam manual berikut:

  1. Halaman 16-21 dari "Microsoft QuickBasic 4.0: dasar bahasa referensi" untuk QuickBasic untuk MS-DOS, versi 4.0 dan 4.0b. Perhatikan bahwa 4.0 manual memerlukan koreksi pada halaman 19 untuk contoh kode $ MHex, sebagai menjelaskan dalam sebuah artikel terpisah ditemukan dalam Pengetahuan Microsoft Basis query pada kata-kata berikut:
    MHex$ dan 19
  2. Halaman 12-17 dari "Microsoft QuickBasic 4.5: dasar bahasa referensi" untuk QuickBasic untuk MS-DOS, versi 4.5. Catatan bahwa ini opsional manual harus dipesan secara terpisah menggunakan kartu urutan yang disediakan dengan Versi 4.5.
  3. Halaman 702-705 dari "Microsoft Basic 7,0: Programmer's Guide" untuk Microsoft dasar PDS untuk MS-DOS, versi 7.0 dan 7.1.
MBF titik mengambang format ini didokumentasikan dalam sebuah artikel terpisahyang dapat ditemukan di dalam Basis Pengetahuan Microsoft oleh query padakata-kata berikut:
MBF dan konversi dan eksponen
VBmsdos QuickBas BasicCom 1,00 1,01 2,00 2.01 3,00 3,20 3.22 3.23 4,00 4.00b 4,50 6,00 6.00b 7,00 7.10

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 69333 - Tinjauan Terakhir: 09/14/2011 12:23:00 - Revisi: 2.0

Microsoft BASIC Professional Development System 7.0, Microsoft BASIC Professional Development System 7.1

  • kbhowto kbmt KB69333 KbMtid
Tanggapan
"text/javascript"> Asimov.clickstreamTracker.init(); >