Czy zera wiodące mogą być znaczące?

0

Ktoś dziś stwierdził, że mogą i w sumie nie przyznałem racji, bo coś mi się w tej tezie nie podoba. Chociaż sam już mam wątpliwości. Może ktoś je rozwiać?

0

W liczbie zero implikacja z tezy zachodzi.

0

Nie wiem dlaczego, ale czytając nazwę tematu pomyślałem o Zbyszku.

0

Cóż, w zapisie biarnym to zależy czy mamy big czy little endian :P

0

W paru językach programowania 35!=035. Więc chyba wiodące zera są znaczące.

0

Moim zdaniem nie ma. Liczba 35 w systemie dziesiętnym ma 3 dziesiątki i 5 jedności. Natomiast 035 ma 0 setek, 3 dziesiątki i 5 jedności. Takie same.

0
TomRiddle napisał(a)

Takie same.

x = 035
y = 35
print "Takie same" if x == y else "Nie takie same"

sprawdź...

0

http://ideone.com/IG5Le

A ja nie doczytałem się w końcu na wiki czy liczba 0 ma jakieś cyfry znaczące :P

0
 if 35 = 035 then ShowMessage('takie same') else ShowMessage('nie takie same');

Delphi mówi że takie same.

0

Ale to tylko kwestia zapisu w języku programowania - tak sobie ktoś wymyślil. Matematycznie zera wiodące nie mają żadnego znaczenia.

0

0.0000012 i zera wiodące mają znaczenie :P

0

Odgrzebie ten temat, bo t.r. twierdził że zera wiodące w Delphi tak jak pokazał nie mają znaczenia. Jednak mimo iż nie jestem taki "pr0" jak on to napisałem dla znajomka i innych zainteresowanych Trainer na surowce dla gry "The Settlers" pod DosBOX'em działający na zasadzie injekcji dllki w proces DOSBoxa. Ponieważ słabo znam się na Pointerach, a w źródle Cheat Engine nie chce mi się szukać jak tam to jest ustawiane kiedy dodajemy Pointery na wartości w pamięci, także podejrzałem kiedyś lame sposób na YT, tylko ze tam gościu robił wieglachną formę w VCL i czitował, a przecież trainer jest jak keygen powinien być jak najmniejszy i najzgrabniejszy, toteż machnąłem go w WinAPI i poprawiając kolejną wersję taką końcowkę tablicy sałych:

//...
    (APointer : $74B6FC; AOffset : $6B1E4E), // Miecze
    (APointer : $74B700; AOffset : $6B1E50) //  Tarcze

aby nie mieć dwóch spacji przed Tarcze ani dodatkowego "/" tylko ładnie jedno pod drugim sformatowane (bo to ostatni elemnt tablicy, a więc bez przecinka po nawiasie) dodałem zero przed 6B1E50 i trainer już źle działał. Także w przypadku Pointerów chyba albo użytej metody injeckji dllki i podmiany wartości w pamięci miało to znaczenie.

Odczyt i zapis Pointerów został zrobiony w taki sposób:

//...
  for I := Low(PointersArr) to High(PointersArr) do
  begin
    AValue := PDWORD(PDWORD(PointersArr[I].APointer)^ + PointersArr[I].AOffset)^;
    CurrentValueArr[I] := AValue;
  end;

Zapis wszystkich na raz jest w pętli i wtedy jest ok, a poszczególnych tak:

procedure SetOneValueThreadProc(Parameter : Pointer);
var
  EditValue : WORD;
  I, I1, I2, I3 : integer;
begin
  I1 := Integer(Parameter);
  EnableWindow(BtnHandleArr[I1], False);
  for I := Low(PointersArr) to High(PointersArr) do
  begin
    CurrentValueArr[I] := PDWORD(PDWORD(PointersArr[I].APointer)^ + PointersArr[I].AOffset)^;
  end;
  I1 := Integer(Parameter);
  EditValue := StrToInt(GetText(EditsHandleArr[I1]));
  CurrentValue := EditValue;
  if EditValue > 0 then
  begin
    if I1 = Boards_Edit_Num then
    begin
      CurrentValue := EditValue - Boards_Difference;
    end;
    if I1 = Stones_Edit_Num then
    begin
      CurrentValue := EditValue - Stones_Difference;
    end;
  end;
  I2 := ReadOrdersArr[I1];
  for I := Low(PointersArr) to High(PointersArr) do
  begin
    if I <> I2 then
    begin
      PDWORD(PDWORD(PointersArr[I].APointer)^ + PointersArr[I].AOffset)^ := CurrentValueArr[I];
    end
    else
    begin
      PDWORD(PDWORD(PointersArr[I2].APointer)^ + PointersArr[I2].AOffset)^ := CurrentValue;
    end;
  end;
  EnableWindow(BtnHandleArr[I1], True);
  I3 := BTNBASE + I1;
  MessageBox(MainDialogHandle,
    PChar(FormatC('Value of %s set to %d.', ItemHintsArr[I3], EditValue)),
    PChar(App_Title), MB_ICONINFORMATION + MB_OK);
end;

Kompletnego źródła nie wrzucam, bo po co, niech będzie dla mnie. Jak ktoś chce potestować grę i Trainer to dodam tylo że gra jest abandonware i wraz z DosBoxem wrzuciłem ją na: http://olesio.eu/settlers.rar (wystarczy rozpakować i uruchomić run.bat), a trainer jest na: http://olesio.eu/settlers_trainer.exe no i niniejszą odpowiedź popełniłem jakby ktoś miał przekoananie że w Delphi jednak na ogół zera wiodące nie mają znaczenia.

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