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