Попробуйте что-то вроде этого:
void make_circle(float *output, size_t num, float radius)
{
size_t i;
for(i = 0; i < num; i++)
{
const float angle = 2 * M_PI * i / num;
*output++ = radius * cos(angle);
*output++ = radius * sin(angle);
}
}
Это не проверено, возможно, что при вычислении шага угла может быть скрыто одно за другим, но оно должно быть близко.
Это предполагает, что я, конечно, правильно понял вопрос.
ОБНОВЛЕНИЕ : Переделал вычисление угла, чтобы не увеличивать его, чтобы уменьшить потерю точности с плавающей точкой из-за многократного добавления.