🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #416

Re: int ???

#416
From: Piotr Auksztulewicz
Date: Tue, 01 Jul 1997 14:58
78 lines
2492 bytes
Bartlomiej Czardybon (czar@david.silesia.pik-net.pl) wrote:

: Czesc
: 	
: 	Jak ktos zgadnie co ten kod wypisze to stawiam piwo, jak mi powie
: dlaczego to wypisuje to stawiam piec piw :-))

: sub konwertuj {
:     $ile=$_[0];

To jest blad. Powinno byc:

my $ile = $_[0];

Ale w tym przypadku to akurat nie ma znaczenia.

:     return int($ile*100);
: } 

: $ile="19.40";
: print $ile*100,"\n";
: print konwertuj($ile)."\n";

Sprawdzilem, co wypisuje:

1940
1939

Zrobilem to prosciej, zeby sie upewnic, ze nie jest cos nakombinowane
z ta procedura:

perl -e 'print 19.40*100, "\t", int(19.40*100), "\n"'

Efekt ten sam.  Powod: obliczenia zmiennoprzecinkowe. Bynajmniej nie jest
to bug w PA-RISCu (zakladam, ze puszczales to na zeusie).
Generalnie takie cos:

(x*y)/y == x 

(i wiele podobnych) nie zawsze jest prawdziwe dla obliczen
zmiennoprzecinkowych! Akurat miales pecha z tym 19.40. Zrobilem to w C:

#include <stdio.h>
#include <math.h>

main()
{
    double ile = 19.40;
    printf("%f\t%f\n", ile*100.0, floor(ile*100.0));
}

Efekt: 1940.000000     1939.000000
Zrobilem to samo na liczbach o mniejszej precyzji (float) i dostalem:
1939.999962     1939.000000

Wszystko jasne? (piwo tez?)
(Wniosek dodatkowy: perl uzywa podwojnej precyzji...)

PS. Pentium liczy tak samo (puscilem to na Linuxie).
# cat /proc/cpuinfo
processor       : 0
cpu             : 586
model           : Pentium 75+
vendor_id       : GenuineIntel
stepping        : 5
fdiv_bug        : no <--- nie ma buga w procesorze!
hlt_bug         : no
fpu             : yes
fpu_exception   : yes
cpuid           : yes
wp              : yes
flags           : fpu vme de pse tsc msr mce cx8
bogomips        : 39.83


--
Piotr Auksztulewicz                 piotras@zeus.polsl.gliwice.pl
Centrum Komputerowe Politechniki Slaskiej, Gliwice, Akademicka 16
Technical Details
Message-ID: <5pb5us$ccu@zeus.polsl.gliwice.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!ict.pwr.wroc.pl!polsl.gliwice.pl!polsl.gliwice.pl!not-for-mail
References: <5patf0$d5d@zeus.polsl.gliwice.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!ict.pwr.wroc.pl!polsl.gliwice.pl!polsl.gliwice.pl!not-for-mail
From: piotras@polsl.gliwice.pl (Piotr Auksztulewicz)
Newsgroups: pl.comp.lang.perl
Subject: Re: int ???
Date: 1 Jul 1997 16:58:36 +0200
Organization: Politechnika Slaska, Gliwice
Lines: 78
Message-ID: <5pb5us$ccu@zeus.polsl.gliwice.pl>
References: <5patf0$d5d@zeus.polsl.gliwice.pl>
NNTP-Posting-Host: zeus.polsl.gliwice.pl
X-Newsreader: TIN [version 1.2 PL2]
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit