Go to file
2024-06-30 20:27:20 -04:00
Readme.md update: update readme 2024-06-30 20:27:20 -04:00
sin.c update: use copysign() instead of d=sign(alpha) 2024-06-30 20:13:30 -04:00

对比 https://www.bilibili.com/video/BV1Ys3TeFEgi/ 中提到的迭代计算 \sin 函数的算法和使用泰勒展开,意外地发现还是泰勒展开赢麻了……

当前结果

在 i5 10400ES 上,通过

gcc -march=native -O2 -o sin sin.c

得到结果为(用时是指循环 10000000 次总耗时,否则都太快了计时误差太大)

./sin
sin11(0.0001) = 9.999999983330736e-05, it = 55, dsin=-5.551115095370206e-17, took 1.013875 s.
sin2(0.0001) = 9.999999983333334e-05, it = 2, dsin=8.333333333333334e-23, took 0.064005 s.
sin11(0.5) = 0.4794255386042029, it = 55, dsin=-4.871561831101115e-17, took 0.977128 s.
sin2(0.5) = 0.479425538604203, it = 7, dsin=-2.333729166204778e-17, took 0.284716 s.
sin11(1) = 0.8414709848078967, it = 55, dsin=2.999280301164362e-17, took 0.981563 s.
sin2(1) = 0.8414709848078965, it = 9, dsin=-8.220635246624331e-18, took 0.421509 s.
sin11(1.3) = 0.9635581854171931, it = 55, dsin=-1.484916792996379e-17, took 0.981924 s.
sin2(1.3) = 0.963558185417193, it = 10, dsin=4.835779466409166e-18, took 0.471155 s.
sin11(1.7) = 0.9916648104524686, it = 55, dsin=-7.152306208153797e-18, took 0.991410 s.
sin2(1.7) = 0.9916648104524686, it = 10, dsin=4.239843809646965e-17, took 0.472351 s.