Ignore:
Timestamp:
Jan 16, 2011, 3:08:56 PM (14 years ago)
Author:
george
Message:
  • Přidáno: Kódování a dekódování dynamického čísla. Použita kombinace rekurzivní délky a absolutní binární hodnoty s virtuální nejvyšší jedničkou.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • CoolStreaming/Demo/DynNumber/UMainForm.pas

    r126 r127  
    5151    ListView1.BeginUpdate;
    5252    ListView1.Clear;
    53     for I := 0 to 16 do begin
     53    for I := 0 to 10000 do begin
    5454      N.Stream.Size := 0;
    5555      N.Write(I);
     
    6060      NewItem := ListView1.Items.Add;
    6161      NewItem.Caption := IntToStr(I);
    62       NewItem.SubItems.Add('');
     62      J := Floor(Log2(I)) + 1;
     63      NewItem.SubItems.Add(FloatToStr(Round((1 - (J / N.Stream.Size)) * 100) / 100));
    6364      NewItem.SubItems.Add(Line);
    6465    end;
     
    7273var
    7374  I: Integer;
     75  II: Integer;
    7476  Count: Integer;
    7577  Parts: array of Integer;
     
    8082  NewItem: TListItem;
    8183  N: TDynamicNumber;
     84const
     85  Step = 1;
    8286begin
    8387  Count := 1;
     
    8791    ListView1.BeginUpdate;
    8892    ListView1.Clear;
    89     for I := 0 to 1000 do begin
    90 
     93    for II := 0 to 20000 do begin
     94      I := II * Step;
    9195    // Write
    9296    N.Stream.Size := 0;
     
    104108    NewItem.Caption := IntToStr(I);
    105109    J := Floor(Log2(I)) + 1;
    106     NewItem.SubItems.Add(FloatToStr(1 - (J / N.Stream.Size)));
     110    NewItem.SubItems.Add(FloatToStr(Round((1 - (J / N.Stream.Size)) * 100) / 100));
    107111    Line := '';
    108112    N.Stream.Position := 0;
     
    112116
    113117    // Increment value
     118    for J := 0 to Step - 1 do begin
    114119    PartIndex := Count - 1;
    115120    repeat
    116121      Parts[PartIndex] := Parts[PartIndex] + 1;
    117       if PartIndex > 0 then MaxValue := 1 shl (Parts[PartIndex - 1] + 1)
     122      if PartIndex > 0 then MaxValue := 1 shl (Parts[PartIndex - 1] + 1 + PartIndex)
    118123        else MaxValue := 2;
    119124      if Parts[PartIndex] >= MaxValue then begin
     
    129134      end else Break;
    130135    until False;
     136    end;
    131137    end;
    132138  finally
Note: See TracChangeset for help on using the changeset viewer.