2016-06-18 20 views
6

Moja SSE-FPU generuje następujące Nans:Pytania dotyczące operacji na NaN

  • Kiedy zrobić każdy podstawowy dwusystemowy jak ADDSD, SUBSD, MULSD lub DIVSD i jednym z obu operandów jest NaN, wynik ma znak operandu NaN, a niższe 51 bitów mantysy wyniku jest obciążone niższymi 51 bitami mantysy operandu NaN.
  • Gdy obie operacje są NaN, wynik jest ładowany ze znakiem rejestru przeznaczenia, a niższe 51 bitów wynikowej mantysy jest ładowane z niższymi 51 bitami rejestru przeznaczenia przed operacją. Tak więc prawo asocjacyjne nie ma znaczenia przy wykonywaniu multiplikacji na dwóch operandach NaN!
  • Kiedy wykonuję SQRTSD na wartości NaN, wynik ma znak operandu NaN, a niższe 51 bitów wyniku jest obciążone niższymi 51 bitami operandu.
  • Kiedy robię mnożenie nieskończoności z zerową lub nieskończonością, zawsze otrzymuję -NaN (wynik binarny 0xFFF8000000000000u).
  • Jeśli jakikolwiek operand jest sygnalizacyjnym NaN, wynik staje się cichym NaN, jeśli wyjątek nie jest maskowany.

Czy to zachowanie zostało określone w dowolnym miejscu standardu IEEE-754?

+0

* wynik staje się cichym NaN, jeśli wyjątek nie jest maskowany *. Myślę, że masz na myśli "jeśli wyjątek jest maskowany *. Nie otrzymujesz wyniku z instrukcji wywołujących wyjątki matematyczne SSE. Myślę, że przynajmniej część z tego jest udokumentowana w [podręcznikach ISA Intela] (https: // www-ssl .intel.com/content/www/us/pl/procesory/architekci-software-developer-manuals.html), ale ciekawe pytanie o to, ile jest ono wymagane lub zasugerowane przez IEEE-754. –

+0

Ponadto: Myślę, że masz na myśli przemiennie, aby opisać fakt, że normalnie wynik mul lub add nie zależy od tego, który argument jest celem (matematyka FP nie jest asocjacyjna nawet bez NaNs; 'a + b + c może nie być równy' c + b + a 'z powodu zaokrąglania w inny sposób) –

Odpowiedz

6

NaN mają znak i ładowność, łącznie nazywane są informacje zawarte w NaN.
Cały punkt NaN polega na tym, że są "lepkie" (może Monadyczne jest lepszym terminem?), Kiedy już mamy NaN w wyrażeniu, całe wyrażenie jest oceniane na NaN.
Również NaN są traktowane specjalnie podczas oceniania predykatów (jak relacje binarne), na przykład jeśli a jest NaN, to nie jest równe sobie.

Punkt 1
Z IEEE 754:

propagacji informacji diagnostycznej wymaga, aby informacje zawarte w Nans być zachowane poprzez operacji arytmetycznych i zmiennoprzecinkowych formacie konwersji.

Punkt 2
Z IEEE 754:

Każda operacja z udziałem jednego lub dwa wejścia Nans, żaden z nich sygnalizacji, sygnalizuje żadnego wyjątku, ale jeśli zmiennoprzecinkowych wyniku ma być dostarczony, powinien dostarczyć jako wynik cichy NaN, który powinien być jednym z wejść NaNs.

Żadna operacja zmiennoprzecinkowa nigdy nie była asocjacyjna.
Myślę, że szukałeś terminu commutative, chociaż asocjatywność wymaga co najmniej trzech operandów.

Punkt 3
patrz punkt 4

Punkt 4
IEEE 754:

Nieprawidłowe operacje są
1. Każda operacja w sygnalizacji NaN (6,2)
2. Dodawanie lub odejmowanie - odejmowanie wielkości nieskończoności, takie jak,.210 (+ nieskończoność) + (nieskończoność)
3. mnożenie - 0 x NIESKOŃCZONOŚCI
4. Division - 0/0, nieskończoność/NIESKOŃCZONOŚCI
5. Reszta - X REM r, gdzie r ma wartość zero lub X jest nieskończona
6. pierwiastek operandzie jest mniejszy niż zero
7. konwersji binarnego zmiennoprzecinkowym do całkowitej lub formacie dziesiętnym podczas przelewowy nieskończoność lub NaN wyklucza wiernego reprezentację w tej postaci i nie może w przeciwnym razie zostanie zasygnalizowany:
8. Porównanie za pomocą predykatów obejmujących < lub>, bez?, gdy operandy są unordere d (5.7, tabela 4)

Punkt 5
IEEE 754:

Każda operacja obejmujący sygnalizację NaN lub nieprawidłowe działania (7.1), w razie nie pułapka występuje, a jeśli wynik zmiennoprzecinkowy ma zostać dostarczony, w wyniku czego dostarczamy cichy NaN.


Ze względu na swoje znaczenie, standard IEEE 754 można znaleźć here.

+0

Znalazłem specyfikację IEEE-754-2008 tutaj: http://www.csee.umbc.edu/~tsimo1/CMSC455/IEEE-754-2008.pdf - wydaje się być bardziej precyzyjne –

+0

@BonitaMontero Dzięki Bonita, nie mam dostępu do tego serwera: 403. –

+0

Znalazłem interesującą rzecz: Kiedy robię operacja na dwóch operandach z x87-FPU i obydwie są NaN, mantysa wynikowego cichego NaN jest większą wartością 51 bitów obu operandów. Jakie narkotyki palili w firmie Intel? –

Powiązane problemy