real=double

0

Mam program w pascalu (nie mojego autorstwa).
Program ten wykonuje pewne obliczenia dla n danych. Dokładnie zajmuje się tym jedna procedura.
I teraz tak.
W tej procedurze są wykonywane liczne pętle a w nich przypisania i odwołania do tablic (stosunkowo czasochłonne).
Mierze czas wykonania tej procedury i po dodaniu takich dyrektyw:

{$A-,B-,D-,E+,F-,G+,I-,N+,Q-,R-,T-,X-}

oraz takiej linijki kodu:

type
real=double;

procedurka leci około 5 razy szybciej.

Czy ktoś może mi wyjaśnić dlaczego (co dokładnie daje to: real=double; )[???]

0

Stare real (czyli paskalowe) operuje na 6-bajtowych danych. Nie jest to naturalne dla procesorów intelowskich (nie jest też w standardzie IEEE 754) więc musi być emulowane software'owo, a co za tym idzie jest o wiele wolniejsze. Stosując double (8 bajtowe) lub single (4 bajtowe) przyspieszamy działanie, gdyż koprocesor arytmetyczny przejmuje na siebie zadanie wykonywania obliczeń.

1 użytkowników online, w tym zalogowanych: 0, gości: 1