Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja Direct3D 10 obsługuje kilka różnych reprezentacji zmiennoprzecinkowych. Wszystkie obliczenia zmiennoprzecinkowe działają w ramach zdefiniowanego podzestawu zachowania zmiennoprzecinkowego IEEE 754 32-bitowej precyzji.
- 32-bitowe reguły Floating-Point
- 16-bitowych reguł Floating-Point
- 11-bitowych i 10-bitowych reguł Floating-Point
- Tematy pokrewne
32-bitowe reguły Floating-Point
Istnieją dwa zestawy reguł: te zgodne ze standardem IEEE-754 i te, które odbiegają od standardu.
Honorowane reguły IEEE-754
Niektóre z tych reguł są jedną opcją, w której ieee-754 oferuje opcje wyboru.
- Podziel przez 0 daje +/- INF, z wyjątkiem 0/0, co powoduje nan.
- wartość dziennika (+/-) generuje wartość -INF. dziennik wartości ujemnej (innej niż -0) generuje wartość NaN.
- Pierwiastek kwadratowy (rsq) lub pierwiastek kwadratowy (sqrt) liczby ujemnej generuje Wartość NaN. Wyjątek to -0; sqrt(-0) generuje -0, a rsq(-0) generuje -INF.
- INF — INF = NaN
- (+/-)INF / (+/-)INF = NaN
- (+/-)INF * 0 = NaN
- NaN (dowolna wartość op) = NaN
- Porównania EQ, GT, GE, LT i LE, gdy oba operandy są zwracane FALSE.
- Porównania ignorują znak 0 (więc +0 równa się -0).
- Porównanie wartości NE, gdy oba operandy to NaN zwraca wartość true.
- Porównania dowolnej wartości innej niż NaN względem +/- INF zwracają prawidłowy wynik.
Odchylenia lub dodatkowe wymagania dotyczące reguł IEEE-754
- IEEE-754 wymaga operacji zmiennoprzecinkowych, aby wygenerować wynik, który jest najbliższą wartością godną reprezentowania do nieskończenie precyzyjnego wyniku, znanego jako zaokrąglony do najbliższego. Direct3D 10 definiuje jednak luźniejsze wymaganie: 32-bitowe operacje zmiennoprzecinkowe generują wynik, który znajduje się w jednym miejscu ostatniej jednostki (1 ULP) nieskończonie precyzyjnego wyniku. Oznacza to, że na przykład sprzęt może obcinać wyniki do 32-bitowego, a nie wykonywać zaokrąglenia do najbliższego nawet, co spowodowałoby błąd co najwyżej jednego ULP.
- Nie ma obsługi wyjątków zmiennoprzecinkowych, bitów stanu lub pułapek.
- Denorms są opróżniane do znaku zachowane zero w danych wejściowych i wyjściowych dowolnej operacji matematycznej zmiennoprzecinkowej. Wyjątki są tworzone dla operacji we/wy lub przenoszenia danych, które nie manipulują danymi.
- Stany zawierające wartości zmiennoprzecinkowe, takie jak Viewport MinDepth/MaxDepth, BorderColor wartości itp., mogą być udostępniane jako wartości denorm i mogą być opróżniane przed użyciem sprzętu.
- Minimalna lub maksymalna liczba operacji opróżniania normów w porównaniu, ale wynik może lub nie może być opróżniony.
- Dane wejściowe NaN do operacji zawsze generuje wartość NaN w danych wyjściowych, jednak dokładny wzorzec bitowy nazwy NaN nie jest wymagany do zachowania tej samej wartości (chyba że operacja jest instrukcją nieprzetworzonego przenoszenia — która w ogóle nie zmienia danych).
- Minimalna lub maksymalna liczba operacji, dla których tylko jeden operand to NaN, zwraca drugi operand w wyniku (w przeciwieństwie do powyższych reguł porównania). Jest to nowa reguła IEEE (IEEE 754R), wymagana w trybie Direct3D 10.
- Kolejną nową regułą IEEE 754R jest to, że min(-0,+0) == (+0,-0) == -0 i max(-0,+0) == max(+0,-0) == +0, który honoruje znak, w przeciwieństwie do reguł porównania dla podpisanego zera (określone powyżej). Direct3D 10 zaleca zachowanie IEEE 754R tutaj, ale nie zostanie wymuszone; dopuszczalne jest, aby wynik porównywania zer był zależny od kolejności parametrów, przy użyciu porównania, które ignoruje znaki.
- x*1.0f zawsze powoduje wartość x (z wyjątkiem opróżniania norm).
- x/1.0f zawsze powoduje wynik x (z wyjątkiem opróżnienia denorm).
- x +/- 0.0f zawsze powoduje wartość x (z wyjątkiem opróżnienia denorm). Ale -0 + 0 = +0.
- Operacje połączone (takie jak mad, dp3) generują wyniki, które nie są mniej dokładne niż najgorsze możliwe szeregowe porządkowanie oceny niezmiernego rozszerzania operacji. Należy pamiętać, że definicja najgorszej możliwej kolejności, w celu tolerancji, nie jest stałą definicją dla danej operacji połączonej; zależy od określonych wartości danych wejściowych. Poszczególne kroki w niezmaganym rozszerzaniu są dozwolone 1 tolerancji ULP (lub instrukcje Direct3D 10 wywołuje bardziej łagodną tolerancję niż 1 ULP, tym bardziej łagodna tolerancja jest dozwolona).
- Operacje połączone są zgodne z tymi samymi regułami NaN co operacje niezwiązane.
- Pomnóż i podziel każdą operację na 32-bitowym poziomie dokładności zmiennoprzecinkowej (dokładność do 1 ULP).
16-bitowe reguły Floating-Point
Direct3D 10 obsługuje również 16-bitowe reprezentacje liczb zmiennoprzecinkowych.
Format:
- 1 bit znaku (s)w pozycji bitowej MSB
- 5 bitów wykładnika stronniczego (e)
- 10 bitów ułamka (f) z dodatkowym ukrytym bitem
Wartość float16 (v) jest zgodna z następującymi regułami:
- jeśli e == 31 i f != 0, to v jest naN niezależnie od s
- if e == 31 and f == 0, then v = (-1)s*infinity (podpisana nieskończoność)
- jeśli wartość e wynosi od 0 do 31, v = (-1)s*2(e-15)*(1.f)
- jeśli e == 0 i f != 0, to v = (-1)s*2(e-14)*(0.f) (zdenormalizowane liczby)
- jeśli e == 0 i f == 0, to v = (-1)s*0 (ze znakiem zero)
32-bitowe reguły zmiennoprzecinkowe zawierają również 16-bitowe liczby zmiennoprzecinkowe dostosowane do układu bitowego opisanego powyżej. Wyjątki od tego obejmują:
- Precyzja: Operacje bezfusowe na 16-bitowych liczbach zmiennoprzecinkowych generują wynik, który jest najbliższą wartością reprezentującą nieskończonie precyzyjny wynik (zaokrąglony do najbliższego parzystego, na IEEE-754, zastosowany do wartości 16-bitowych). 32-bitowe reguły zmiennoprzecinkowe są zgodne z 1 tolerancją ULP, 16-bitowe reguły zmiennoprzecinkowe są zgodne z 0,5 ULP w przypadku operacji niezrozumionych i 0,6 ULP dla operacji bezpieczonych.
- 16-bitowe liczby zmiennoprzecinkowe zachowują denormy.
11-bitowe i 10-bitowe reguły Floating-Point
Direct3D 10 obsługuje również formaty zmiennoprzecinkowe 11-bitowe i 10-bitowe.
Format:
- Brak bitu znaku
- 5 bitów wykładnika stronniczego (e)
- 6 bitów ułamka (f) dla formatu 11-bitowego, 5 bitów ułamka (f) dla formatu 10-bitowego, z dodatkowym ukrytym bitem w obu przypadkach.
Wartość float11/float10 (v) jest zgodna z następującymi regułami:
- jeśli e == 31 i f != 0, v jest naN
- if e == 31 and f == 0, then v = +infinity
- jeśli wartość e wynosi od 0 do 31, v = 2(e-15)*(1.f)
- if e == 0 and f != 0, then v = *2(e-14)*(0.f) (denormalizowane liczby)
- jeśli e == 0 i f == 0, to v = 0 (zero)
32-bitowe reguły zmiennoprzecinkowe zawierają również 11-bitowe i 10-bitowe liczby zmiennoprzecinkowe dostosowane do układu bitowego opisanego powyżej. Wyjątki obejmują:
- Precyzja: 32-bitowe reguły zmiennoprzecinkowe są zgodne z 0,5 ULP.
- 10/11-bitowe liczby zmiennoprzecinkowe zachowują normy.
- Każda operacja, która spowoduje, że liczba jest mniejsza niż zero, jest zaciśnięta do zera.
Tematy pokrewne
-
zasoby (Direct3D 10)