Saya membandingkan pelampung di Jawa sekarang dan rumus paling sederhana adalah:
Math.abs(a - b) < THRESHOLD
Saat menamai variabel Anda untuk ambang perbedaan, haruskah Anda menamainya delta atau epsilon ? Secara khusus, yang mana dari dua adalah istilah yang benar untuk nilai terkecil yang dapat mewakili angka floating-point?
Apakah istilah bahasa pemrograman itu spesifik, atau universal di seluruh bahasa?
Jawaban:
Epsilon dalam matematika dan teknik
Dalam matematika dan teknik secara umum:
dan epsilon tampaknya lebih sesuai untuk kasus Anda.
Epsilon dalam ilmu komputer
Dalam ilmu komputer khususnya, istilah epsilon juga mengacu pada mesin espilon yang mengukur perbedaan antara
1.0f
dan float terkecil yang benar-benar lebih besar dari1.0f
. Angka terakhir adalah1.00000011920928955078125f
untuk pelampung di Jawa dan dapat dihitung dengan:Definisi epsilon mesin konsisten dengan penggunaan umum epsilon yang dijelaskan di atas.
Membandingkan pelampung
Namun perhatikan bahwa sebelum membandingkan pelampung untuk "kedekatan", Anda harus memiliki gagasan tentang skalanya. Dua pelampung yang sangat besar dan konon sangat berbeda dapat sama:
Dan sebaliknya, mungkin ada banyak kemungkinan nilai float (dan beberapa urutan besarnya) antara dua float kecil yang berbeda dengan mesin epsilon "hanya". Dalam contoh di bawah ini, ada 10.000.000 nilai float yang tersedia antara
small
danf
, tetapi perbedaannya masih jauh di bawah epsilon mesin:Artikel yang ditautkan dalam jawaban GlenH7 menyelidiki perbandingan float lebih lanjut dan mengusulkan beberapa solusi untuk mengatasi masalah ini.
sumber
Dalam matematika, delta digunakan untuk mewakili beberapa perbedaan dari nilai, epsilon digunakan untuk mewakili nilai kesalahan yang berubah-ubah. Dalam hal ini, epsilon akan menjadi nama konvensional.
sumber
Untuk langsung menjawab pertanyaan Anda, Anda ingin menggunakan istilah itu
epsilon
. Lebih tepatnya, itumachine epsilon
tetapi penggunaan umum menjatuhkan "mesin" dan hanya menggunakanepsilon
.Mencari di salinan lokal saya,
float.h
saya melihat:Dan komentar yang terkait memperjelas bahwa epsilon adalah istilah yang Anda maksud.
Tetapi kita juga dapat mengandalkan beberapa referensi eksternal lain untuk memverifikasi bahwa itu
epsilon
adalah istilah yang benar. Lihat di sini , di sini , di sini , dan akhirnya kombinasi dari tag permintaan SO ini . Saya tidak dapat menemukan referensi langsung ke standar IEEE 754 untuk dikutip.Anda tidak bertanya, tetapi saya menemukan referensi ini yang sangat relevan dengan contoh yang Anda berikan untuk mengklarifikasi pertanyaan Anda.
Lihat artikel blog ini oleh Bruce Dawson dari Valve tentang membandingkan nilai floating point untuk beberapa wawasan mengapa Anda tidak ingin menggunakan perbandingan yang Anda sarankan.
Ada cukup banyak informasi yang dimasukkan ke dalam artikel itu, tetapi ini adalah cuplikan yang paling relevan dari sana:
Dawson membahas beberapa pertimbangan lain tentang seluk-beluk yang terlibat ketika membandingkan mengapung dan berurusan dengan nilai-nilai yang sangat kecil seperti ini, jadi saya akan mendorong Anda membaca sisa posnya.
sumber
simplest formula
untuk perbandingan. Banyak yang menggunakan pendekatan itu sebagai upaya pertama, dan saya memasukkan artikel Dawson karena itu benar-benar masuk ke nuansa betapa rumit perbandingan itu. Jadi saya mencoba untuk langsung menjawab pertanyaan dan kemudian menunjukkan mengapa tidak menggunakannya seperti itu.Ini adalah fungsi kesalahan; kesalahan absolut biasanya disebut ε (epsilon) atau Δ x untuk beberapa kuantitas x:
Kesalahan relatif kadang-kadang disebut η (eta):
Untuk tujuan pemrograman,
absoluteError
danrelativeError
(atau beberapa singkatannya) lebih deskriptif. Jika Anda ingin menegaskan bahwa kesalahan kurang dari nilai tertentu, nilai itu hanya akan disebut ambang batas atau toleransi .Lihat:
Kesalahan Mutlak di Wolfram MathWorld
Kesalahan Perkiraan di Wikipedia
sumber
Saya akan menyebutnya "toleransi".
Mungkin itu bukan istilah yang benar secara matematis, tetapi fakta bahwa Anda mengajukan pertanyaan menyiratkan kepada saya bahwa "delta" atau "epsilon" tidak akan menjadi nama variabel yang baik untuk digunakan.
Dalam pengalaman saya, lebih baik menggunakan nama pengenal yang masuk akal bagi mereka yang benar-benar akan membaca kode. Apa gunanya nama yang benar-benar benar jika itu berarti bahwa pembaca perlu mencarinya di Wikipedia untuk memahami apa artinya?
sumber