- 
                Notifications
    You must be signed in to change notification settings 
- Fork 2
Closed
Labels
completedIssue completed and committed to develop. To be closed on next releaseIssue completed and committed to develop. To be closed on next releaseenhancementNew feature or requestNew feature or request
Description
The following routine is proposed:
function NormaliseByWeight(const Weights: array of Double):
  Types.TDoubleDynArray;
var
  Weight: Double;
  WeightSum: Double;
  Idx: Integer;
begin
  if (System.Length(Weights) = 0) then
    raise SysUtils.EArgumentException.Create('Array of weights is empty');
  WeightSum := 0.0;
  for Weight in Weights do
  begin
    if Math.Sign(Weight) = Math.NegativeValue then
      raise SysUtils.EArgumentException.Create('Weights must all be >= 0');
    WeightSum := WeightSum + Weight;
  end;
  if Math.IsZero(WeightSum) then
    raise SysUtils.EArgumentException.Create('Sum of weights can''t be zero');
  System.SetLength(Result, System.Length(Weights));
  for Idx := 0 to Pred(System.Length(Weights)) do
    Result[Idx] := Weights[Idx] / WeightSum;
end;Metadata
Metadata
Assignees
Labels
completedIssue completed and committed to develop. To be closed on next releaseIssue completed and committed to develop. To be closed on next releaseenhancementNew feature or requestNew feature or request
Projects
Status
Completed