Hasta donde tengo entendido estas utilizando tambien tus variables del contador para multiplicar algunas cosas
Código Delphi
[-]
BaseR:= (2*(P1[(i<--AQUI*3)+2]))/100; BaseG:= (2*(P1[(i<--AQUI*3)+1]))/100;
BaseB:= (2*(P1[(i<--AQUI*3)]))/100;
ExpR:= -1*sqr(P1[(i<--AQUI*3)+2])/100; ExpG:= -1*sqr(P1[(i*3)+1])/100;
ExpB:= -1*sqr(P1[(i*3)])/100;
AuxR:= exp(ExpR);
AuxG:= exp(ExpG);
AuxB:= exp(ExpB);
r:=round(abs(BaseR*AuxR)); g:=round(abs(BaseG*AuxG)); b:=round(abs(BaseB*AuxB));
PC[i*3]:=round(b); PC[(i*3)+1]:=round(g);
PC[(i*3)+2]:=round(r);
no estoy completamente seguro, pero cuando multiplicas variables de diferente tipo marca que no son compatibles, o invalid float. Intenta tambien cambiando tus variables del contador, de todas formas no te afecta por que siempre seran enteros
Saludos