Pracuję nad nową wersją mojego Mandelbrot screensaver i kończy mi się dokładność zmiennoprzecinkowa - proste wartości double nie mają wystarczających liczb znaczących dla moich potrzeb.Dowolny odpowiednik "rozszerzony" dla C#?
więcej cyfr znaczących = wyższe poziomy powiększając fraktalnej
powrotem, gdy napisali wersję ekranu Delphi 7, że zastosowano typ extended zmiennoprzecinkowych 80 bitów wielkości.
W .NET, mógłbym przełączyć się na decimal, ale uderzenie wydajnościowe jest straszne, spowalnia generowanie fraktali o współczynnik około 20.
Czy istnieje odpowiednik przedłużony dla .NET? Lub alternatywnie, czy istnieją jakieś typy liczbowe z większą precyzją niż podwójne, które nadal używają FPU do oceny i dlatego nie mają trafienia o wysokiej wydajności dziesiętnie?
Aktualizacja
Moja wygaszacz już uda się przybliżyć do fraktala przez wielu (wielu!) Rzędów wielkości; obecnie resetuje się do podstawowego fraktala tylko wtedy, gdy używany typ numeryczny nie jest w stanie oddzielić rzędnych dla sąsiednich pikseli. Dodatkowe 16 bitów precyzji od podwójnie rozszerzonego ulepszenia dałoby mi prawie 16 podwojeń wielkości.
Jeśli chodzi o wydajność, mój algorytm już jest w stanie wyeliminować 95-99% wymaganej matematyki (w porównaniu do naiwnej implementacji, która oblicza wiele pikseli), zachowując jednocześnie integralność fraktala.
Prawdopodobnie musisz napisać kod natywny do tego, ponieważ rozszerzony korzysta z 80-bitowego rejestru zmiennoprzecinkowego w x86. Lub nie jestem pewien, czy możliwe jest zmniejszenie głodu programu dla większej precyzji. Nie jestem ekspertem w tej dziedzinie, więc nie mogę podać dalszych porad. – nhahtdh