Ik was bezig met een script tot ik steeds allerlei rare excepties terug kreeg die mijn script zelf had gegooid, omdat ik wilde voorkomen dat mijn script een getal groter dan 100 doorkreeg (om wat voor reden dan ook, niet interessant).
Het getal dat ik in het script gooide was echter niet groter dan 100, maar exact 100. Het getal is zo berekend:
var = 100 / 9
getal = 0
getal += var
getal += var
getal += var
getal += var
getal += var
getal += var
getal += var
getal += var
getal += varOftewel: (100 / 9) * 9. Reken zelf maar uit, dit geeft echt honderd (misschien geeft het 99.9999... op slechte rekenmachines). Ook in php zou deze berekening exact 100 geven, als je het met (100 / 9) * 9 doet. Als je 9 keer plus doet lijkt hij die in eerste instantie ook te geven (als je echo $getal doet komt er 100 op het scherm te staan). Als je nu echter deze vergelijking maakt: getal > 100, krijg je een 1 terug. Zeer tegenstrijdig dus.Nu wil ik vragen: Zie ik iets over het hoofd, doe ik iets fout? En zo niet, kunnen jullie het probleem ook eens testen op jullie php-bak, om te kijken of het op iedere versie voorkomt? Hier is een snippet om het probleem te testen:
<?php
$number = 9;
echo 'Het getal = ' . $number . '. Het getal 100 wordt nu gedeeld door $number<br />';
$numberDivided = 100 / 9;
echo 'Het getal is gedeeld, en daar is deze uitkomst uitgekomen: ' . $numberDivided . '.<br />';
$numberProductByStar = $numberDivided * 9;
echo 'Het gedeelde getal is nu weer keer $number gedaan d.m.v. de *-operator. Uitkomst: ' . $numberProductByStar . '.<br />';
$numberProductByKruis = 0;
$numberProductByKruis += $numberDivided;
$numberProductByKruis += $numberDivided;
$numberProductByKruis += $numberDivided;
$numberProductByKruis += $numberDivided;
$numberProductByKruis += $numberDivided;
$numberProductByKruis += $numberDivided;
$numberProductByKruis += $numberDivided;
$numberProductByKruis += $numberDivided;
$numberProductByKruis += $numberDivided;
echo 'Het gedeelde getal is nu weer keer $number gedaan door er 9 keer $numberDivided bij op te tellen. Uitkomst: ' . $numberProductByKruis . '.<br />';
echo 'Kijk of $numberProductByStar groter is dan 100: ';
echo $numberProductByStar > 100 ? 'Ja' : 'Nee';
echo '.<br />';
echo 'Kijk of $numberProductByKruis groter is dan 100: ';
echo $numberProductByKruis > 100 ? 'Ja' : 'Nee';
?>Hier zou dit uit moeten komen (als de bug er niet is):Het getal = 9. Het getal 100 wordt nu gedeeld door $number
Het getal is gedeeld, en daar is deze uitkomst uitgekomen: 11.111111111111.
Het gedeelde getal is nu weer keer $number gedaan d.m.v. de *-operator. Uitkomst: 100.
Het gedeelde getal is nu weer keer $number gedaan door er 9 keer $numberDivided bij op te tellen. Uitkomst: 100.
Kijk of $numberProductByStar groter is dan 100: Nee.
Kijk of $numberProductByKruis groter is dan 100: NeeAls de bug er wel is dan moet de laatste nee Ja worden.
Als dit echt een bug blijkt te zijn zal ik hem submitten op de bug-track van php.net. Bedankt voor jullie hulp alvast.