Еще немного:
В данном коде видна основная ошибка, человек мыслит как математик а не как программист,
если есть задание получать числа в диапазоне от 0.0000 до 0.9999 то нужно работать с float по другому представить нельзя.
а если идет хранение в int, то идет постоянное преобразование, это медленно. немного переработанный код:
int main(int argc, char * argv[])
{
srand(234234234);
for (i = 0; i < SIZE; ++i) {
color1[i] = rand()/(RAND_MAX/9999);
color2[i] = rand()/(RAND_MAX/9999);
alpha[i] = rand()/(RAND_MAX/9999);
}
for (j = 0; j < ITERS; ++j)
for (i = 0; i < SIZE; ++i)
output[i] = (color1[i]*alpha[i] + color2[i]*(10000-alpha[i]));
printf("blend(%.4f, %.4f, %.4f) = %.4f\n",
(float)color1[0]/(float)10000,
(float)color2[0]/(float)10000,
(float)alpha[0]/(float)10000,
(float)output[0]/(float)10000);
return 0;
}
и результаты на 32 бит машине.
c int
~/work/test/float :> time ./int
blend(0.7010, 0.8640, 0.9905) = 0.7025
2.80user 0.01system 0:02.84elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+4230minor)pagefaults 0swaps
~/work/test/float :> time ./float
blend(0.7011, 0.8641, 0.9906) = 0.7026
2.95user 0.01system 0:03.03elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+4229minor)pagefaults 0swaps
получили немного лучший результат. но идет падением точности.
P.S. значения получились другие наверно машина 32 бит