Я написал шейдер MandelBrot, основанный на этом: http://blogs.msdn.com/b/shawnhar/archive/2006/12/11/sixty-fractals-per-second.aspx
float4 PixelShader(float2 texCoord : TEXCOORD0) : COLOR0
{
float2 c = (texCoord - 0.5) * Zoom * float2(1, Aspect) - Pan;
float2 v = 0;
for (int n = 0; n < Iterations; n++)
{
v = float2(v.x * v.x - v.y * v.y, v.x * v.y * 2) + c;
}
return (dot(v, v) > 1) ? 1 : 0;
}
Я бы хотел увеличить величину, на которую можно увеличить, используя что-то с большей точностью, чем с плавающей точкой. Я прочитал несколько вещей в Интернете, таких как http://www.bealto.com/mp-mandelbrot_fp128-opencl.html, однако, это довольно сложно понять и неполно.
Используемый мной графический процессор не поддерживает double, поэтому я застрял с 32-битными целочисленными значениями и числами с плавающей запятой (и векторами / массивами с плавающей запятой длиной до 4).
Как я могу представить одно число с плавающей запятой более точным способом, чем это допускает обычный метод с плавающей запятой?
Операции, которые мне нужно поддерживать: x , + , - и (> или > = )
Я использую модель пиксельного шейдера 3.0.
Я посмотрел на Q числовой формат , однако проблема, с которой я столкнулся, заключается в том, что если я использую 2 32-битных числа, мне нужна 64-битная временная переменная для умножения (и деления).