[Vienna-pm] noch seltameres...

Peter J. Holzer hjp-vienna-pm-list at hjp.at
Thu Mar 30 06:57:08 PST 2006


On 2006-03-30 10:25:59 +0200, Nagy Wilhelm wrote:
> Hallo Leute,
> 
> erstmal besten dank fuer eure hilfe.
> 
> Wer gerne gruebelt...
> 
> $sValue = 0.0001;
> $sValue *= 0.75;
> $sValue = sprintf('%f',$sValue);
> 
> printf("%.5f\n",$sValue);
> printf("%.5f\n",$sValue+1-1);
> printf("%.5f\n",$sValue*1);
> printf("%.5f\n",$sValue/1);
> 
> 
> ergibt bei mir folgendes:
> ---------- DoProgram ----------
> 0.00007
> 0.00008
> 0.00007
> 0.00007
> 
> Output completed (0 sec consumed) - Normal Termination
> 
> Besonder spannend ist
> printf("%.5f\n",$sValue+1-1);

Das ist nicht sonderlich verwunderlich. 0.000075 ist in Binärzahlen
nicht exakt darstellbar (genausowenig, wie z.B. 1/7 in Dezimalzahlen
exakt darstellbar ist). Die nächste als IEEE-754-Double-Precision
Floatingpointzahl darstellbare Zahl ist 

  7.4999999999999993e-05: + 01111110001 [1.]0011101010010010101000110000010101010011001001100001

(Dezimaldarstellung auf 17 Stellen gerundet). Das wird also bei Rundung
auf 5 Nachkommastellen auf 0.00007 abgerundet.

Das +1 wäre exakt 
01111111111 [1.]000000000000010011101010010010101000110000010101010011001001100001

was auf

01111111111 [1.]0000000000000100111010100100101010001100000101010101

aufgerundet wird. Wenn man davon wieder 1 abzieht, ist man bei 

01111110001 [1.]0011101010010010101000110000010101010100000000000000

was dezimal ca. 0.00007500000000005 ist. Wenn man das auf 5
Nachkommastellen rundet, kommt natürlich 0.00008 heraus.

Standardregel aus der numerischen Datenverarbeitung: Addition und
Subtraktion sind Böse(TM).

	hp


-- 
   _  | Peter J. Holzer    | Ich sehe nun ein, dass Computer wenig
|_|_) | Sysadmin WSR       | geeignet sind, um sich was zu merken.
| |   | hjp at hjp.at         |
__/   | http://www.hjp.at/ |	-- Holger Lembke in dan-am
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20060330/4094f75f/attachment.bin


More information about the Vienna-pm mailing list