Ketik 0.1 + 0.2 pada kalkulator di atas dan Anda akan melihat 0.30000000000000004 alih-alih angka rapi 0.3 yang Anda harapkan. Kalkulator ini tidak rusak — ia menampilkan hasil tepat dari sebuah operasi aritmetika biner tertentu. Memahami masalah tersebut hanya butuh kurang dari lima menit dan akan mengubah cara Anda membaca setiap hasil desimal dari kalkulator digital mana pun.
Mengapa 0,1 tidak dapat disimpan secara tepat dalam biner
Setiap angka di dalam komputer disimpan dalam format biner — basis 2, hanya menggunakan digit 0 dan 1. Pecahan yang terlihat sederhana dalam desimal (basis 10) seringkali menjadi pecahan berulang tak terhingga dalam biner, persis seperti 1 ÷ 3 = 0,3333… yang berulang selamanya dalam desimal.
Angka desimal 0,1 adalah salah satu pecahan seperti itu. Dalam biner, nilainya adalah 0.0001100110011001100110011… — sebuah pola yang berulang tanpa henti. Komputer yang menggunakan standar IEEE 754 double-precision (format yang digunakan oleh JavaScript, dan karenanya oleh setiap kalkulator berbasis browser) menyimpan angka dalam tepat 64 bit. 64 bit tersebut tidak dapat menampung deretan digit tak terhingga, sehingga nilainya dibulatkan ke angka terdekat yang dapat direpresentasikan. Hasil pembulatannya bukan tepat 0,1; melainkan:
0.1000000000000000055511151231257827021181583404541015625
Hal yang sama terjadi pada 0,2. Representasi binernya juga merupakan pecahan berulang tak terhingga, dan setelah dibulatkan menjadi:
0.200000000000000011102230246251565404236316680908203125
Apa yang terjadi ketika kedua nilai yang telah dibulatkan tersebut dijumlahkan
Ketika kalkulator menjumlahkan dua representasi yang tidak presisi tersebut, kesalahan-kesalahan kecil itu tidak saling menghapus — melainkan saling bertambah. Penjumlahan menghasilkan:
0.3000000000000000444089209850062616169452667236328125
Angka tersebut, setelah dibulatkan ke float 64-bit terdekat, menjadi 0.30000000000000004. Angka tambahan 4 pada posisi desimal ke-tujuh belas bukan merupakan kesalahan pembulatan oleh kalkulator — melainkan hasil matematis yang benar dari penjumlahan dua aproksimasi biner yang tidak presisi sesuai dengan standar IEEE 754. Setiap perangkat, bahasa pemrograman, dan browser yang mengikuti standar yang sama menghasilkan jawaban yang sama.

Mengapa kalkulator ini menampilkan 0,30000000000000004 dan bukan angka yang lebih bersih
Kalkulator di atas menggunakan new Function() milik JavaScript untuk mengevaluasi ekspresi Anda, yang berarti ia bergantung langsung pada aritmetika floating-point 64-bit bawaan mesin JavaScript. Tidak ada lapisan pembulatan tersembunyi yang merapikan output.
Secara internal, kode tersebut memang membulatkan hasil ke 10 tempat desimal untuk sebagian besar angka — Math.round(result * 1e10) / 1e10 — tetapi 0.30000000000000004 sudah memiliki digit tak terduga pertamanya pada posisi desimal ke-tujuh belas, jauh melampaui ambang pembulatan tersebut. Sehingga hasil floating-point yang sebenarnya lolos tanpa perubahan.
Beberapa kalkulator menyembunyikan hal ini dengan membulatkan secara agresif ke 12 atau 13 angka signifikan sebelum ditampilkan. Pendekatan tersebut menghasilkan tampilan 0.3 yang lebih ramah, tetapi menyembunyikan presisi yang mungkin benar-benar dibutuhkan dalam perhitungan ilmiah atau keuangan. Pertimbangannya nyata: semakin banyak pembulatan tampilan berarti semakin sedikit output yang mengejutkan, tetapi juga semakin sedikit digit yang terlihat.
Apakah ini memengaruhi setiap perhitungan desimal?
Tidak — dan itulah nuansa kuncinya. Apakah suatu kesalahan muncul atau tidak bergantung pada apakah hasilnya dapat direpresentasikan secara tepat dalam biner 64-bit. Beberapa penjumlahan kebetulan dibulatkan dengan sempurna:
- 0,1 + 0,4 = 0,5 — 0,5 dapat direpresentasikan secara tepat dalam biner (
0.1dalam basis 2), sehingga kesalahan-kesalahan saling menghapus dan jawaban bersih pun muncul. - 0,25 + 0,25 = 0,5 — alasan yang sama: kedua nilai merupakan pangkat 2 yang tepat.
- 0,1 + 0,2 = 0,30000000000000004 — baik 0,1 maupun 0,2 tidak dapat direpresentasikan secara tepat, dan kesalahan gabungannya cukup besar untuk bertahan dari pembulatan tampilan.
Polanya bukan "kalkulator salah tentang desimal." Lebih tepatnya: kalkulator tepat dalam hal pecahan biner, dan sebagian besar desimal sehari-hari bukanlah pecahan biner.
Apa yang harus dilakukan ketika presisi menjadi penting
- Untuk aritmetika sehari-hari — kesalahannya berada di posisi desimal ke-enam belas atau ke-tujuh belas dan sama sekali tidak relevan untuk belanja, memasak, atau penganggaran.
- Untuk perhitungan keuangan — gunakan satuan sen penuh daripada pecahan dolar jika memungkinkan, atau gunakan perangkat lunak akuntansi khusus yang menerapkan aritmetika fixed-point.
- Untuk rekayasa atau sains — perhatikan batas presisi (sekitar 15–17 digit signifikan untuk IEEE 754 double precision) dan tentukan apakah hal itu berpengaruh pada toleransi pengukuran Anda.
- Untuk mengonfirmasi kecurigaan — kurangi nilai yang diharapkan:
0.1 + 0.2 - 0.3pada kalkulator di atas menghasilkan kira-kira5.55e-17, ukuran sebenarnya dari kesalahan tersebut.
Coba sendiri: masukkan0.1 + 0.2 - 0.3pada kalkulator di atas. Hasilnya bukan nol — melainkan sekitar5.55e-17, selisih tepat antara aproksimasi yang tersimpan dan nilai sebenarnya. Angka kecil itulah yang diwakili oleh angka tambahan4dalam 0,30000000000000004.