[Systemy liczbowe] Łączność dodawania

krupka888
Użytkownik
Użytkownik
Posty: 23
Rejestracja: 22 lis 2014, o 17:30
Płeć: Kobieta
Lokalizacja: Wrocław
Podziękował: 3 razy

[Systemy liczbowe] Łączność dodawania

Post autor: krupka888 »

Jak dobrać \(\displaystyle{ x, y, z}\) w arytmetyce zmiennoprzecinkowej, aby \(\displaystyle{ (x+y)+z \neq x+(y+z)}\). Czy jest potrzebna pętla?
Ostatnio zmieniony 17 paź 2015, o 13:33 przez Afish, łącznie zmieniany 2 razy.
Powód: Używaj LaTeXa TYLKO do wyrażeń matematycznych.
szw1710

[Systemy liczbowe] Łączność dodawania

Post autor: szw1710 »

Użyłem R

Kod: Zaznacz cały

> (0.02+0.1)+0.1==0.02+(0.1+0.1)
[1] FALSE
Odpowiadam, bo zetknąłem się z tym w książce Biecka o podstawach tego języka. To nie zależy od języka, ale od zapisu dwójkowego liczby \(\displaystyle{ 0.1}\).
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[Systemy liczbowe] Łączność dodawania

Post autor: SlotaWoj »

Jeżeli liczby są pamiętane z dokładnością do \(\displaystyle{ n}\) cyfr binarnych to wystarczy gdy (zakładając dla uproszczenia dodatnie \(\displaystyle{ x}\), \(\displaystyle{ }\)y i \(\displaystyle{ z}\)):
  • \(\displaystyle{ 2^{-n-1}<\frac{y}{x}<2^{-n}\quad\wedge\quad2^{-n-1}<\frac{z}{x}<2^{-n}}\)
krupka888
Użytkownik
Użytkownik
Posty: 23
Rejestracja: 22 lis 2014, o 17:30
Płeć: Kobieta
Lokalizacja: Wrocław
Podziękował: 3 razy

[Systemy liczbowe] Łączność dodawania

Post autor: krupka888 »

Bardzo dziękuję za pomoc. Ale nadal nie rozumiem jak wyznaczyć n.
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[Systemy liczbowe] Łączność dodawania

Post autor: SlotaWoj »

W arytmetyka zmiennopozycyjnej w zastosowaniach praktycznych \(\displaystyle{ n}\) zawsze jest dane. Zależy ono os (ko)procesora i formatu liczby (długość słowa). Dla koprocesora numerycznego Intel, który takie liczby przetwarza jako 10-bajtowe, jest 1 bit znaku 15 bitów cechy i \(\displaystyle{ n=64}\) bity mantysy.
Ostatnio zmieniony 18 paź 2015, o 01:09 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
krupka888
Użytkownik
Użytkownik
Posty: 23
Rejestracja: 22 lis 2014, o 17:30
Płeć: Kobieta
Lokalizacja: Wrocław
Podziękował: 3 razy

[Systemy liczbowe] Łączność dodawania

Post autor: krupka888 »

Czyli mam przyjąć \(\displaystyle{ n=64}\)? czyli \(\displaystyle{ y=z}\) i są w przedziale \(\displaystyle{ x \cdot 2^{-65}<y<x \cdot 2^{-64}}\)
Ostatnio zmieniony 18 paź 2015, o 01:11 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[Systemy liczbowe] Łączność dodawania

Post autor: SlotaWoj »

Dla arytmetyki na koprocesorze intelowskim tak, ale są komputery, które wykorzystują inna arytmetykę. Jeżeli nie ma informacji o tym, jaka ona jest, to jedynym wyjściem jest napisanie programu testowego (składnia Pascala):

Kod: Zaznacz cały

Program Accuracy;
  var
    n : integer;
    r : real;
  begin { Accuracy }
    n := 0;
    r := 0.5; { 2^(-(n+1)) }
    while 1.-r <> 1.
      do
        begin
          n := n+1;
          r := r/2
        end;
    Writeln ('n = ',n)
  end. { Accuracy }
ODPOWIEDZ