Bilangan seperti 0.1 biasanya diproses sebagai floating point. Biasanya
di-store dalam 8 bytes. Jadi sangat akurat untuk perhitungan scientific yang
umum dipakai (sin, cos, atan, ln, etc.). Kalau ada perhitungan yang butuh
accuracy lebih tinggi, biasanya dipakai jenis long double (16 bytes).
Untuk contoh program Perl yang diberikan, output perhitungan yang ditampilkan
mungkin terlihat aneh karena tidak eksak berada dalam kenaikan 0.1. Tetapi,
coba tampilkan rounding bilangan tersebut sampai satu decimal di belakang
koma. Hasilnya "harus" akurat. Jika hasilnya salah, berarti memang ada yang
salah dengan Perl (atau programming language yang dipakai).
Jadi tidak perlu khawatir dengan hitung-hitungan untuk e-commerce, kecuali
precision yang dibutuhkan sangat tinggi. Mungkin ada yang bisa membantu untuk
level accuracy-nya (IEEE spec untuk floating point). Tapi kalau tidak salah,
kalau cuma 16 significant figures sih masih bisa di-handle dengan akurat.
PS: Untuk membandingkan suatu floating point number dengan suatu threshold,
sebaiknya jangan menggunakan cara yang biasa dipakai untuk integer, sebab
bilangan tersebut menggunakan konsep akurasi.
Contoh:
INTEGER
while (a < 10) { ... }
FLOATING POINT
while (abs (a - 10) > 0.05) { ... }
bilangan 0.05 dapat diganti dengan akurasi yang dibutuhkan:
0 digit => 0.5
1 digit => 0.05
2 digit => 0.005
dst.
On Tue, 18 Jan 2000, Mige Harimurti wrote:
mige_h> Wah ... ini.
mige_h> Saya baru tahu ... lho ...
mige_h>
mige_h> Saya membayangkan jika ini terjadi pada perhitungan yang cukup rumit dan
mige_h> banyak. Propagasi kesalahan ini cukup serius. Ini perhitungan pada level
mige_h> ketelitian 0.1 (it's big error if you want to get 1e-3 precission).
mige_h> Mungkin kita justru beruntung karena rupiah kita angkanya besar-besar tapi
mige_h> kalo mau menghitung-hitung pake dolar mesti hati-hati yaa ...
mige_h>
mige_h> Lagi coba-coba perhitungan e-commerce .... kepentok sama hitungan kayak
mige_h> begini.
mige_h> Ada komentar or sugestions ...
mige_h>
mige_h> Mige
mige_h>
mige_h> ----- Original Message -----
mige_h> From: Steven Haryanto <[EMAIL PROTECTED]>
mige_h> To: <[EMAIL PROTECTED]>
mige_h> Cc: <[EMAIL PROTECTED]>
mige_h> Sent: Monday, January 17, 2000 5:58 PM
mige_h> Subject: Re: [programming] Perhitungan di Perl
mige_h>
mige_h>
mige_h> > yap, ini bukan isu-nya perl, tapi karena 0.1 tidak bisa disimpan
mige_h> > secara eksak oleh komputer. program c berikut juga kena kok.
mige_h> >
mige_h> > #include<stdio.h>
mige_h> > main() {
mige_h> > float a=0;
mige_h> > while(a<10){a+=0.1;printf("Jumlah: %.6f\n", a);}
mige_h> > }
mige_h>
mige_h>
mige_h>
mige_h>
--------------------------------------------------------------------------------
mige_h> Utk berhenti langganan, kirim email ke
[EMAIL PROTECTED]
mige_h> Informasi arsip di http://www.linux.or.id/milis.php3
mige_h> Pengelola dapat dihubungi lewat [EMAIL PROTECTED]
mige_h>
--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]