Bug in StrtoFloat

opitz
Neuling
Avatar
Gender: n/a
Age: 69
Posts: 1
Registered: 08 / 2013
Subject:

Bug in StrtoFloat

 · 
Posted: 20.05.2021 - 13:48  ·  #1
In der Routine StrtoFloat ist mir ein Fehler aufgefallen, der zugegeben nur unter besonderen Bedingungen auftritt:

Folgende Konstellation:
var S15: string[25];
ff :float;

S15 := 'abcdefghijk'+#7+'e'+#23+#2;
...
S15 := '-10994.9645';
ff := StrtoFloat (S15);

ein string wird zuvor verwendet und zufälligerweise steht an Position 13 ein 'e'. Bei mir fiel das auf, weil ich String S15 als lokale Variable vereinbart hatte und damit der Speicherort nicht defniert gefüllt ist.

Intern in StrtoFloat erfolgt mit Aufsummieren der letzten Ziffer '5' der Überlauf von 24 bit integer.
Damit wird die Ziffer verworfen, und die Ziffernfolge 10994964 weiter verwendet (korrekt).
Allerdings wird dabei nicht bemerkt, dass der String zuende ist, sondern der Zeiger wird 1x zusätzlich über das Stringende incrementiert, findet zufälligerweise ein 'e', erwartet danach ein + oder - und meldet Fehler mit -2.7747634 E37.

Kürzere oder längere Ziffernfolgen funktionieren übrigens:
S15 := '-10994.964';
S15 := '-10994.96456';
sind ok.

Workaround ist erstmal den String definiert zu beschreiben, das funktioniert.
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 14 · Cache Hits: 14   36   50 · Page-Gen-Time: 0.029311s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI