[Systemy liczbowe] Łączność dodawania
-
- 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
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.
Powód: Używaj LaTeXa TYLKO do wyrażeń matematycznych.
[Systemy liczbowe] Łączność dodawania
Użyłem R
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}\).
Kod: Zaznacz cały
> (0.02+0.1)+0.1==0.02+(0.1+0.1)
[1] FALSE
-
- 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
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}}\)
-
- 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
Bardzo dziękuję za pomoc. Ale nadal nie rozumiem jak wyznaczyć n.
-
- 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
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.
Powód: Poprawa wiadomości.
-
- 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
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.
Powód: Poprawa wiadomości.
-
- 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
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 }