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]

Kirim email ke