At 10:51 25-09-99 -0500, you wrote:
>On 25-Sep-1999, Aldrin Aviananda wrote:
>> gimana kalo:
>> % perl -e '$a = 0; printf("%f\n",$a * -1 + 0)'
>> 0.000000
>> perl stores numbers as signed integer if possible...
komentar aja: meski disimpan sebagai int, kalo ngga
pake pragma 'use integer' kayaknya ngga akan improve
performance. sebab defaultnya, perl menghitung operasi
aritmatik dengan double. mis:
$a = 1; # int
$a = $a*2; # 1(double) * 2(double) = 2(double)
# $a == double
dengan 'use integer':
$a = 1; # int
$a = $a*2; # 1(int) * 2(int) = 2 (int)
tapi ini mungkin bisa dideteksi oleh optimizer.
>tapi gimana roundingnya yah? masalah saya sebetulnya kurang lebih
>begini:
>
>[~]$ perl -e '$a=0.00000000000000000003; $a*=-1; printf("%#-7.3f\n",$a+0)'
>-0.000
>
>itu $a pokoknya kecil banget deh nilainya.. mendekati nol, but not
>exactly.
sori, nerusin kode saya:
$TOL = 1e-6; # atau terserah...
for (@copy) { $_ = 0 if is_numeric($_) and $_ <= 0 and -$_ < $TOL }
intinya, bilangan negatif yang kecil sekali, dan 'negatif nol', diubah
menjadi 'positif nol'.
hm, saya jadi cenderung membiarkan -0.000 itu tetap negatif, tidak
positif. sebab menjadi pertanda bahwa angka tersebut diperoleh dari
pembulatan sebuah angka *negatif* yang kecil sekali. (terbedakan
dari +0.000). it's entirely up to you, though... :-)
--
Steven Haryanto <[EMAIL PROTECTED]>
--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]