atof dauert und dauert ...
-
der Befehl atof braucht ewig viel Zeit.
in meiner Schleife nimmt er 30 Sekunden in Anspruch:
dt.wert = atof(buffi.Mid(wertbeginn+1, wertende));
gibt es eine schnellere Alternative zum atof?? (Außer einen schnelleren Rechner zu kaufen...)
-
selbst schreiben
-
im ersten Moment dachte ich, das ist ein Scherz mit dem Selberschreiben.
Aber es dürfte machbar sein - wenn man nur wüßte, wie ... (haha)
-
double AtoF(const char *zahl){ double d= 0; double p= 10; double k= 1; if(zahl){ for(int i= 0; zahl[i]; i++){ if( zahl[i] >= '0' && zahl[i] <= '9'){ if( p == 1 ) k*= 10; d*= p; d+= ((double)zahl[i] - '0')/k; } else{ switch(zahl[i]){ case '.': case ',': p= 1; break; } } } } return d; } +/- hab ich dir gelassen ;-) und es kann auch am anfang mal ein leerzeichen kommen ;-)
-
ich bezweifel allerdings, dass toostens Code schneller als atof ist
-
ich auch, aber er brauchte eine idee
-
Meine Version ist doch schneller ...
... hat aber auch nicht alles implementiert ( +/- leerzeichen exponentschreibweeise)Profile- Programmstatistik:
Funkt. Funkt.+Unterfkt. Anzahl Zeit % Zeit % Aufrufe Funktion ------------------------------------------------------------------ 9,994 0,8 9,994 0,8 811 TEST(char const *) (test.obj) //atof() 0,178 0,0 1,368 0,3 811 TEST(char const *) (test.obj) //AtoF()
Versuchsprogramm:
#include <iostream> using namespace std; double AtoF(const char *zahl){ double d= 0; double p= 10; double k= 1; if(zahl){ for(int i= 0; zahl[i]; i++){ if( zahl[i] >= '0' && zahl[i] <= '9'){ if( p == 1 ) k*= 10; d*= p; d+= ((double)zahl[i] - '0')/k; } else{ switch(zahl[i]){ case '.': case ',': p= 1; break; } } } } return d; } double TEST(const char *zahl){ return AtoF(zahl); } void main(){ char zahl[1000]; for(double d= 0; d < 1000; d+= 1.23456789){ sprintf(zahl, "%f", d); cout<<TEST(zahl)<<endl; } }
[ Dieser Beitrag wurde am 09.09.2002 um 09:03 Uhr von toosten editiert. ]
-
Da aber ersichtlich ist das beide Programmversionen beim Test nicht mehr als 1% der Gesamtzeit brauchen würde ich sagen das nicht atof so langsam ist sondern etwas anderes in Deinem Programm ;-).