Tillægsværdi ændrer sig med float, hvorfor?
Hej experter,Jeg har en fin voldsom for-løkke til at simulere nogle kemiske reaktioner for mig over tid.
Som overordnede styrende indeks benytter jeg selvfølgelig tidsvariabler;
Eksempelvis sat til:
$DeltaT = 0.001;
$T = 60;
Simuleringen styres så af en for-løkke:
for ($tid = 0; $tid <= $T; $tid = $tid + $DeltaT) {
...
}
Input til hvad $DeltaT og $T skal være før forsøget har jeg brugt en html form til, denne del:
<b>DeltaT:</b><input type="float" name="DeltaT" value="0.001"><br>
<b>T:</b><input type="float" name="T" value="60"><br>
Som det kan ses har jeg sat type til float, da muligheden skal være åben for at bruge RIGTIG mange decimaler.
Problemet er så, at når jeg kører det som eksemplet med 0.001 og 60, så viser min logfil:
$LogTid = 1/$DeltaT;
if ($LogCount == $LogTid) {
fwrite($handle, "$tid;");
...
}
Der her er indstillet til at logge hver 1/$DeltaT'ne gang, dvs. i eksemplet hver 1000'ne gang, eller rettere sagt, hvert sekund.
Logfilen viser ikke 1;2;3;4;... osv. som den burde gøre.
Den viser 1;1.9999999999999;2.9999999999998;3.9999999999997;5;6.0000000000003;7.0000000000007;8.000000000001;9.0000000000005; osv...
Altså varierer tiden, omend meget lidt. Dette er dog kritisk da beregningsmodellen benytter tiden som faktorer og er meget følsom overfor de mindste fejl.
Men hvordan kan det være de ændrer sig denne lille smule? Det er da mystisk. Kan selvfølgelig brug round()-funktionen, men vil egentlig hellere forstå hvorfor den gør det.
Nogen der har en idé?