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.
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.