Apa cara terbaik untuk menjelaskan masalah pembulatan titik mengambang kepada pelanggan ?
aku tahu
http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html
serta entri dalam C ++ FAQ dan berbagai halaman lain yang ditujukan untuk pengembang dan ilmuwan, tetapi apakah ada halaman web, artikel atau penjelasan, yang ditujukan untuk pelanggan "biasa" dengan latar belakang matematika atau ilmiah terbatas? (yang referensi di atas jatuh datar).
Jika itu dipertahankan atau berasal dari lembaga atau korporasi yang terkenal dan terkenal, semuanya lebih baik, mengingat, seperti yang mungkin dialami beberapa dari Anda, mungkin akan sedikit rumit untuk menjelaskannya sendiri.
customer-relations
Eric Grange
sumber
sumber
Jawaban:
Saya menemukan cara sederhana untuk menjelaskan ini dengan menunjukkannya . Diskusikan bagaimana membaginya
x
dengan angka, kemudian mengalikannya dengan angka yang sama akan mengembalikan Andax
lagi - membuat pelanggan setuju bahwa ini harus selalu menjadi masalah. Kemudian lakukan yang lama(100 / 3) * 3
dengan kalkulator; menunjukkan bahwa nilainya tidak, seperti yang Anda harapkan, kembali ke 100. Ketika kebanyakan orang melihat matematika sederhana "mogok", maka cenderung 'mendapatkan' bahaya angka floating point di mana akurasi penting (meskipun secara intuitif cara, daripada ke tingkat rendah artikel yang Anda tuju).Sayangnya sebagian besar kalkulator yang setengah layak (tentu saja semua yang ilmiah yang pernah saya lihat, dan lebih dari beberapa yang dasar) saat ini mampu menangani ini - saya kira mereka menyimpan digit tambahan di luar apa yang dapat ditampilkan dan dibulatkan - begitu juga periksa seberapa pintar kalkulator Anda sebelum Anda melakukannya di depan pelanggan Anda.
sumber
Saya tidak berpikir ada jalan pintas. Anda harus:
Atau, jika itu terlalu banyak dibutuhkan, Anda harus:
Mungkin contoh dengan angka irasional membantu (meskipun floating masalah titik berlaku untuk bilangan rasional juga):
sqrt(2) ~ 1.414
. Lalu1.414^2 = 1.999396
. Tidak peduli berapa banyak digit yang Anda ambil, Anda tidak akan pernah kembali ke aslinya2
. Ok, 4 digit signifikan yang benar mungkin dapat diterima, tetapi kemudian pertimbangkan apa yang terjadi ketika "kesalahan pembulatan" ini menumpuk. Di situlah bahaya sesungguhnya.sumber
Pertama, tentukan apa yang mereka keluhkan. Transaksi keuangan harus dilakukan dengan tepat, dengan jumlah desimal yang tepat dan aturan pembulatan yang tepat. Ini biasanya berarti mempertahankan angka integral dari unit mata uang dan memastikan aritmatika dilakukan dengan benar.
Atau, mereka mungkin mengeluh tentang tampilan berlebih, dan mengurangi jumlah output digit signifikan mungkin semua yang diperlukan.
Untuk angka pada umumnya, Anda selalu dapat mencoba untuk membuat desimal tiga digit x sehingga x * 3 adalah 10. Itu menunjukkan prinsip-prinsip dasar.
Ada dua masalah yang tersisa. Salah satunya adalah bahwa angka-angka tertentu dapat dinyatakan tepat dalam desimal tetapi bukan biner (3,15, katakanlah). Itu akan sulit untuk dijelaskan kepada orang-orang non-teknis, dan taruhan terbaik Anda adalah mencoba menghindarinya dengan tidak memberikan angka yang cukup signifikan untuk ditampilkan. Yang lain adalah pelanggan yang tahu sedikit, cukup untuk mengetahui bahwa aritmatika komputer tidak selalu tepat dan tidak cukup untuk menyadari bahwa aritmatika desimal tidak selalu tepat. Saya telah berdebat dengan beberapa dari mereka, dan tidak ada yang berguna untuk dilaporkan.
sumber
Angka floating point di komputer menggunakan biner, jadi sama seperti kita memiliki sistem angka dengan satu, puluhan, ratusan, dan persepuluh, ratusan kolom, angka floating point di komputer benar-benar memiliki satu, dua, empat, dan setengah, empat perempat, dan kolom kedelapan. Jika pelanggan terbiasa dengan kaki / inci, maka ingatkan mereka tentang bagaimana Anda biasanya menggunakan fraksi dasar-2 inci untuk pengukuran.
Sekarang cobalah untuk menyimpan 10 sen sebagai kombinasi bagian, perempat, per delapan dolar. Itu tidak bekerja:
.00011001100110011. . . ( mengulangi tanpa batas )
Itu sama dengan mengambil pita pengukur kekaisaran standar dan mencoba mengukur sepersepuluh inci. Anda tidak dapat melakukannya dengan akurat. Tidak ada representasi 1/10 sebagai X / Y di mana X dan Y adalah bilangan bulat dan Y adalah kekuatan 2.
Itu sebabnya kami memiliki tipe data desimal yang menggunakan 4 bit untuk menyimpan setiap digit desimal , jadi kami kembali ke representasi basis 10. Imbalannya adalah dalam ruang dan kinerja (sekitar hit kinerja 100%, dari apa yang saya baca).
sumber
Katakan kepada mereka bahwa sama seperti rekening bank mereka tidak dapat menampung 4,4423425908459032890413 ... dolar (itu adalah $ 4,44 atau $ 4,45, tidak ada di antaranya), komputer tidak dapat dengan mudah menyimpan nomor dengan presisi sewenang-wenang. Ketidaksempurnaan penyimpanan menyebabkan ketidaksempurnaan perhitungan.
(Ini sedikit curang, tetapi harus memberi mereka gambaran tentang apa masalahnya.)
sumber
2/3
Mintalah mereka untuk menuliskan jawaban yang tepat untuk dua dibagi dengan 3.
Karena jawaban 'berlangsung selamanya' Anda dapat menunjukkannya.
Menggunakan 1/3 juga berfungsi tetapi 2/3 mungkin adalah contoh yang sedikit lebih baik karena pembulatan memberi Anda (misalnya) .6666667 sedangkan 0,3333333 sepertinya hanya bisa dipotong.
sumber
sumber
Beberapa perhitungan yang dilakukan menurut beberapa aturan hukum. Misalnya, jika Anda ingin menghitung berapa banyak pajak penghasilan yang harus dibayar atas penghasilan tahunan kena pajak € 79.245,18 di Jerman, hanya ada satu jawaban yang benar. Anda bisa melakukannya dengan benar atau Anda mendapatkan salah. Jika Anda melakukannya dengan benar, Anda tidak perlu menjelaskan cara kerja aritmatika floating point. Jika Anda salah, Anda tidak perlu menjelaskan cara kerja aritmatika floating point, Anda harus memperbaiki kode yang rusak.
Kadang-kadang Anda menampilkan hasil yang tidak terlihat benar. Misalnya, jika Anda mengonversi US $ 13.297,46 ke UK £ dengan dua digit desimal, dan kemudian mengonversi jumlah UK £ itu kembali ke US $, Anda mungkin tidak mendapatkan US $ 13.297,46 tetapi US $ 13.297,45 atau US $ 13.297,47. Yang tidak ada hubungannya dengan aritmatika floating-point. Ini masalah yang tak terhindarkan dan Anda lebih bisa menjelaskan mengapa itu tidak bisa dihindari. (Anda juga harus tahu mengapa masalah tidak terjadi ketika Anda mengonversi dari UK £ ke US $ dan kembali).
Ada hasil lain yang mungkin yang tidak terlihat benar. Jika Anda mengonversi angka menjadi persentase, persentase tersebut seharusnya menambahkan hingga 100%, tetapi mungkin tidak. Jika Anda menampilkan empat persentase dengan dua desimal, empat persentase yang ditampilkan mungkin menambahkan hingga 99,99% atau 100,01%. Tidak ada hubungannya dengan aritmatika floating-point. Masih Anda harus dapat menjelaskan mengapa.
Selanjutnya, ada situasi di mana penggunaan aritmatika floating-point yang sembrono menyebabkan hasil yang tidak pantas. Misalnya, a + b + c biasanya tidak sama dengan b + c + a. Jika itu menyebabkan masalah, tidak ada yang bisa dijelaskan, itu adalah sesuatu yang Anda perbaiki.
sumber