Любой эквивалент расширенного для С#?

Я работаю над новой версией моей заставки Mandelbrot, и у меня заканчиваются плавающие точечная точность — простые двойные значения не имеют достаточно значимых цифр для моих нужд.

Более значимые цифры = более высокие уровни масштабирования фрактала.

Когда я писал версию этой заставки в Delphi 7, я использовал extended тип с плавающей запятой, размер 80 бит.

В .NET я мог бы переключиться на десятичный, но снижение производительности для этого ужасно, замедляя генерацию фракталов примерно в 20 раз.

Есть ли аналог extended для .NET? Или, в качестве альтернативы, существуют ли какие-либо числовые типы с более высокой точностью, чем double, которые все еще используют FPU для оценки и, следовательно, не имеют высокой производительности decimal?

Обновить

Моя заставка уже успевает увеличить фрактал на много (много!) порядков; в настоящее время он сбрасывается до базового фрактала только тогда, когда используемый числовой тип не может разделить ординаты для соседних пикселей. Дополнительные 16 бит точности от двойного расширения дали бы мне еще около 16 удвоений размера.

Что касается производительности, мой алгоритм уже умудряется исключить 95-99% необходимой математики (по сравнению с наивной реализацией, которая вычисляет много пикселей), сохраняя при этом целостность фрактала.


person Bevan    schedule 23.09.2012    source источник
comment
Вероятно, для этого вам потребуется написать собственный код, поскольку расширенный использует 80-битный регистр с плавающей запятой в x86. Или я не уверен, можно ли уменьшить потребность программы в большей точности. Я не спец в этом, так что больше ничего не могу посоветовать.   -  person nhahtdh    schedule 23.09.2012


Ответы (1)


На 64-битных платформах тип Extended является псевдонимом для Double, который занимает всего 8 байт. На 32-битных платформах число Extended представляется как 10 байтов (80 бит).

Это означает, что даже ваша программа Delphi может плохо работать на 64-битных платформах.

Если вам нужен числовой тип данных с более чем 64 битами, выберите decimal и оптимизируйте свои алгоритмы для повышения производительности.

person jorel    schedule 23.09.2012
comment
Согласованный. Я не думаю, что вам нужна более абсолютная точность для расчета рендеринга Mandlebrot с высоким разрешением (подтверждением тому является тот факт, что существует множество программ, которые работают почти бесконечно глубоко на очень высоких скоростях). Я думаю, что ОП просто должен думать о решении проблемы по-другому. - person Dai; 23.09.2012