Я написал шейдер 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 однако его довольно сложно понять, и он неполный.
Используемый мной графический процессор не поддерживает двойное число, поэтому я застрял с 32-битными целыми числами и числами с плавающей запятой (и векторами/массивами чисел с плавающей запятой длиной до 4).
Как я могу представить одно число с плавающей запятой более точным способом, чем позволяет обычный float?
Мне нужно поддерживать следующие операции: x, +, - и (> или >= сильный>)
Я использую модель пиксельного шейдера 3.0.
Я просмотрел формат числа Q, однако у меня возникла проблема заключается в том, что если я использую 2 32-битных целых числа, мне нужна 64-битная временная переменная для умножения (и деления).