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

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 69333 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

RINGKASAN

Untuk dapat diandalkan menguji apakah dua variabel floating-point atau ekspresi sama (menggunakan IEEE format atau MBF), Anda harus mengurangi dua variabel dibandingkan dan menguji apakah perbedaan mereka adalah kurang dari nilai dipilih pada batas-batas penting untuk tunggal atau ganda presisi. TIDAK ADA TES UNTUK KESETARAAN AKAN DAPAT DIANDALKAN. Berikut rumus 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 dan Professional edisi dari Microsoft Visual Basic untuk MS-DOS, versi 1.0; di Microsoft QuickBasic untuk MS-DOS (QB87.EXE prosesor pembantu versi hanya), versi 3.0, 4.0, 4.0b, dan 4,5; di Microsoft Basic Compiler untuk MS-DOS dan MS OS/2, versi 6.0 dan 6.0b; dan dalam Microsoft Basic Professional Development System (PDS) untuk MS-DOS dan MS OS/2, versi 7.0 dan 7.1.

MBF (Microsoft biner Format) ditemukan dalam Microsoft QuickBasic untuk MS-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, versi 3.2, 3.22, dan 3.23.

Informasi di dalam artikel ini juga termasuk dalam berkas Bantuan disediakan dengan standar dan edisi profesional Microsoft Visual 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-bit sementara mendaftar, yang memiliki lebih banyak potongan-potongan akurasi daripada disimpan dalam presisi tunggal atau ganda presisi variabel. Ini sering mengakibatkan Jika pernyataan kembali kesalahan yang menyatakan bahwa menengah perhitungan 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", tetapi adalah 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, # untuk Double presisi) akan mempengaruhi presisi di mana perhitungan yang disimpan dan dicetak. Apapun tipe casting Anda lakukan, Anda mungkin masih Lihat 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), seperti perhitungan dolar dan sen, Anda harus menggunakan mata uang (@) tipe data yang ditemukan dalam Visual Basic untuk MS-DOS, versi 1.0 dan dasar PDS untuk MS-DOS, versi 7.0 dan 7.1. Mata uang data ketik persis menyimpan hingga 19 digit, dengan 4 digit setelah tempat desimal.

Referensi:

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

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

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

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

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

Batasan di atas sering menyebabkan dasar untuk kembali floating-point hasil yang berbeda daripada yang Anda harapkan. Informasi lebih lanjut tentang ini topik dapat ditemukan di dalam Basis Pengetahuan Microsoft dengan query pada kata-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 terpisah yang dapat ditemukan di dalam Basis Pengetahuan Microsoft oleh query pada kata-kata berikut:
MBF dan konversi dan eksponen

Properti

ID Artikel: 69333 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft BASIC Professional Development System 7.0
  • Microsoft BASIC Professional Development System 7.1
Kata kunci: 
kbhowto kbmt KB69333 KbMtid
Penerjemahan Mesin
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.

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com