Code:
extern "C"
{
void sincosf(float err, float *s, float *c);
}
void setup() {
long m;
float res;
res = 0;
m = micros();
for (int i=0;i<100000;i++) {
float s =sin(i);
float r =cos(i);
res += s * r;
}
asm volatile ("dsb":::"memory");
m = micros() -m;
Serial.println("sin():");
Serial.println(res);
Serial.println(m);
res = 0;
m = micros();
for (int i=0;i<100000;i++) {
float s =sinf(i);
float r =cosf(i);
res += s * r;
}
asm volatile ("dsb":::"memory");
m = micros() -m;
Serial.println("sinf():");
Serial.println(res);
Serial.println(m);
res = 0;
m = micros();
for (int i=0;i<100000;i++) {
float Sin, Cos;
sincosf(i, &Sin, &Cos);
res += Sin * Cos;
}
asm volatile ("dsb":::"memory");
m = micros() -m;
Serial.println("SinCosf:");
Serial.println(res);
Serial.println(m);
}
void loop() {
}
..one could assume, float x = sinf(float) is faster than float x = sin(float).
Nope.
sin(): 95874 microseconds
sinf(): 662325 microseconds
Why ??? Can you please fix this?