Hej wszystkim, szybkie pytanie: W jaki sposób typ .NET decimal
jest reprezentowany w pamięci binarnej?Reprezentacja binarna .NET dziesiętna
Wszyscy wiemy, jak liczby zmiennoprzecinkowe są przechowywane i thusly przyczyny niedokładności ich, ale nie mogę znaleźć żadnych informacji o decimal
wyjątkiem następujących:
- Widocznie bardziej dokładne niż o zmiennym liczba punktów
- przyjmuje 128 bitów pamięci
- 2^96 + znak zakres
- 28 (czasem 29?) łączne znaczących cyfr numeru
Czy mogę to rozwiązać? Naukowiec komputerowy we mnie domaga się odpowiedzi i po godzinie próbowania badań nie mogę go znaleźć. Wygląda na to, że albo jest dużo zmarnowanych kawałków, albo po prostu wyobrażam sobie, że to zło w mojej głowie. Czy ktoś może rzucić trochę światła na to? Dzięki.
+1 fantastyczna odpowiedź, od razu do sedna i bogata w informacje. – JoshD
@Jacob: Nie, to * wyraźnie * nie jest prawdą. Biorąc pod uwagę, że możesz zacząć od liczby całkowitej i kończy się na (powiedzmy) 0,1, to oczywiście przesuwa się w prawo. Gdybyś mógł * tylko * przesunąć w lewo, mógłbyś reprezentować 10, 100 itd. - ale nie 0.1, 0.01 itd. W przyszłości, poczekaj na "potwierdzenie", zanim zmienisz znacząco znaczenie odpowiedzi. Zobacz dokumentację 'decimal': http://msdn.microsoft.com/en-us/library/1k2e8atx.aspx - gdzie współczynnik skalowania mówi się o * dzieleniu * liczby całkowitej, co jest równoważne przesunięciu go do dobrze. –
Moje przeprosiny. Dla mnie bardziej intuicyjne jest myślenie o przesunięciu * przecinka dziesiętnego * do * lewej *, ale teraz widzę, że odnosisz się do "przesuwania" mantysy. – Jacob