| SumOfSeries Routines | 
Unit
QESBPCSMath
| Overloaded Variants | 
| Function SumOfSeries(EndValue: LongWord): Int64; | 
| Function SumOfSeries(StartValue, EndValue: LongWord): Int64; | 
Declaration
Function SumOfSeries(EndValue: LongWord): Int64;
Description
If only a single parameter is used, then it assumes that 1 is the StartValue. Returns the sum of all the integers between StartValue & EndValue inclusive. Optimised BASM supplied by Marcel Martin.
| Parameters | 
| StartValue | Value to Start Summation from. Optional - 1 is assumed if omitted. | 
| EndValue | Last Value of Series to Sum. | 
Category
Arithmetic Routines for IntegersImplementation
 
| function SumOfSeries (EndValue: LongWord): Int64; asm mov ecx, eax mul eax //(edx:eax) := EndValue˛ add eax, ecx //(edx:eax) := EndValue˛ + EndValue adc edx, 0 shr edx, 1 //Result := (edx:eax) shr 1 rcr eax, 1 //rcr ~ Rotate Carry Right End; | 
Declaration
Function SumOfSeries(StartValue, EndValue: LongWord): Int64;Implementation
 
| function SumOfSeries (StartValue, EndValue: LongWord): Int64;
begin
     if EndValue = StartValue then
     begin
          Result := StartValue;
          Exit;
     end
     else if EndValue < StartValue then
     begin
          Result := 0;
          Exit;
     end;
     Result := SumOfSeries (EndValue) - SumOfSeries (StartValue) + StartValue;
End; | 
|  |