#include <stdio.h>
#include <stdint.h>
typedef int32_t Q16;
Q16 floatToQ16(float in)
{
return in*(1<<16);
}
float q16ToFlaot(Q16 in)
{
return (float)in/(1<<16);
}
Q16 q16mul(Q16 a, Q16 b)
{
return (int64_t)a*b>>16;
}
Q16 q16pol(Q16 a, Q16 b, Q16 c, Q16 x)
{
return q16mul(a, q16mul(q16mul(x, x), x))
+ q16mul(b,q16mul(x,x))
+ q16mul(c, x);
}
int main(void) {
printf("2*20.123^3+3*20.123^2+4*20.123=%f\n", q16ToFlaot(q16pol(floatToQ16(2.0f),
floatToQ16(3.0f),
floatToQ16(4.0f),
floatToQ16(20.123f))));
// your code goes here
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCnR5cGVkZWYgaW50MzJfdCBRMTY7CgpRMTYgZmxvYXRUb1ExNihmbG9hdCBpbikKewoJcmV0dXJuIGluKigxPDwxNik7CQp9CmZsb2F0IHExNlRvRmxhb3QoUTE2IGluKQp7CglyZXR1cm4gKGZsb2F0KWluLygxPDwxNik7Cn0KUTE2IHExNm11bChRMTYgYSwgUTE2IGIpCnsKCXJldHVybiAoaW50NjRfdClhKmI+PjE2Owp9ClExNiBxMTZwb2woUTE2IGEsIFExNiBiLCBRMTYgYywgUTE2IHgpCnsKCXJldHVybiBxMTZtdWwoYSwgcTE2bXVsKHExNm11bCh4LCB4KSwgeCkpIAoJICAgICAgKyBxMTZtdWwoYixxMTZtdWwoeCx4KSkgCgkgICAgICArIHExNm11bChjLCB4KTsgCn0KaW50IG1haW4odm9pZCkgewoJcHJpbnRmKCIyKjIwLjEyM14zKzMqMjAuMTIzXjIrNCoyMC4xMjM9JWZcbiIsCgkgICAgICAgIHExNlRvRmxhb3QocTE2cG9sKGZsb2F0VG9RMTYoMi4wZiksIAoJICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdFRvUTE2KDMuMGYpLCAKCSAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRUb1ExNig0LjBmKSwgCgkgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0VG9RMTYoMjAuMTIzZikpKSk7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQo=