[ c00l_daem0n @ 03.12.2004. 21:01 ] @
Pozdrav,

Počeo sam malo da radim osnove u PHP-u, i naletim na primer gde mi nije baš najjasnije o čemu se radi:

Code:

$var = (19/10 - (19%10)/10)-1;  //vrednost u zagradi je 1 tipa float
echo $var;   // dakle, ocekivao sam ovde 0, ali... neki drugi put


Na konzoli ispisuje vrednost -1.11022302463E-016
Tu sam jos malo kombinovao, castovao, menjao, stavljao neke delove izraza u nove promenljive, međutim nisam došao do rešenja koje je meni logično.
Verujem da se radi o stvari koja je sasvim normalna u PHP-u, ali eto...
[ boccio @ 03.12.2004. 21:23 ] @
'%' (modulus) je binarni operator, daje integer ostatak pri deljenju dva broja...npr. 5 % 4 = 1, itd...

sto se tvog primera tice - rezultat bi i trebalo da bude nula...!?
[ c00l_daem0n @ 03.12.2004. 21:36 ] @
Da, znam kako radi % operator još iz C-a i Jave, pa mi zato i ne ide u glavu.
[ Milos Stojanovic @ 03.12.2004. 21:37 ] @
zanimljivo, verovatno problem u reprezentaciji brojeva u PHPu. Ne verujem da je bug u pravom smislu reči, jer trebalo bi da se isto ovako ponaša i u ostalim jezicima, mada me mrzi sad da probam. Uglavnom, nešto oko zaokruživanja, me thinks ...
operator % u svakom slučaju radi dobro :) , tj:
http://default.co.yu/~trooper/bug.php
Code:
<html>
<?php
        echo 19/10 - 9/10 - 1;
?>
</html>

isto daje taj -1.1102230246252E-16

[Ovu poruku je menjao trooper dana 03.12.2004. u 22:48 GMT+1]
[ noviKorisnik @ 03.12.2004. 21:42 ] @
Šta tu ima da bude čudno? To je greška u operacijama brojevima s pokretnim zarezom.

To je razlog što bi trebalo da se pazi kada tok programa zavisi od rezultat nekih operacija koji treba da se poredi s nulom.

Recimo.
Code:
$r = 19/10 - 9/10;
if ($r - 1 == 0)...

... i greška. Ispravlja se ovako:
Code:
$tolerancija = 1 / pow (10, 10);
$r = 19/10 - 9/10;
if (abs ($r - 1) < $tolerancija)...


[Ovu poruku je menjao noviKorisnik dana 03.12.2004. u 22:56 GMT+1]
[ Milos Stojanovic @ 03.12.2004. 21:47 ] @
Yup, zaista, sad sam video. Sve lepo piše i na http://www.php.net/manual/en/language.types.float.php a bogami i na http://stevehollasch.com/cgindex/coding/ieeefloat.html ;)
[ Radovan__III @ 05.12.2004. 10:48 ] @
zanimljivo je da ovo savrseno radi

Code:

$var = (19/10 - (19%10)/10)+1-2;  // +1 -2
echo $var;   // sad jeste 0