odrive代码阅读笔记

// based on https://math.stackexchange.com/a/1105038/81278 float fast_atan2(float y, float x) { // a := min (|x|, |y|) / max (|x|, |y|) float abs_y = fabsf(y); float abs_x = fabsf(x); // inject FLT_MIN in denominator to avoid division by zero float a = MACRO_MIN(abs_x, abs_y) / (MACRO_MAX(abs_x, abs_y) + FLT_MIN); // s := a * a float s = a * a; // r := ((-0.0464964749 * s + 0.15931422) * s - 0.327622764) * s * a + a float r = ((-0.0464964749f * s + 0.15931422f) * s - 0.327622764f) * s * a + a; // if |y| > |x| then r := 1.57079637 - r if (abs_y > abs_x) r = 1.57079637f - r; // if x < 0 then r := 3.14159274 - r if (x < 0.0f) r = 3.14159274f - r; // if y < 0 then r := -r if (y < 0.0f) r = -r; return r; }
上一篇:postgresql14源码编译安装


下一篇:面向制造和装配的产品设计指南(二):面向装配的设计指南-2. 设计指南