这是本文档旧的修订版!
少用三角函数、除法、开方、求幂、取对数。
比如能除一次不除三次: ${\frac {1.0} {2.0}}×{\frac {3.0} {4.0}}×5.0={\frac {1.0×3.0×5.0} {2.0×4.0}}$
比较时在不溢出的情况下尽量将除法变为乘法:
${\frac a b}>c \Leftrightarrow a>bc$
在不溢出整数范围的情况下,有时可以通过乘 $10^{k}$ 转化为整数运算,最后把结果转化为浮点数输出。
一般不输出 $-0$ 记得处理。
反三角函数有值域问题,比如 $acos(1.0000001)$ 会 $re$ 。
有的时候判断两个角相等需要看 $fabs(a1-a2)<eps||fabs(a1-a2)>2.0*pi-eps$ ,应该是用atan2判断 $180$ 度的时候,两边会相差 $2×pi$ 但其实是一个角。
$atan2(0,0)=0,atan2(1,0)=pi/2,atan2(-1,0)=-pi/2,atan2(0,1)=0,atan2(0,-1)=pi$
所以新学了个处理 $atan2$ 函数的手法: $double\ tmp=atan2(a1);\ if(sgn(tmp)<0)\ tmp+=2*pi;$ ,这样得到的角就是 $[0,2×pi)$ 的了。
$a$ 叉乘 $b$ 为正代表 $a$ 在 $b$ 的顺时针方向。反之为逆。
中线长,两次余弦定理: $M_{a}={\frac {sqrt(2(b^{2}+c^{2})-a^{2})} {2}}$
角分线长,三角形面积算两次: ${\frac {bccos({\frac {A} 2})} {b+c}}$ ,再通过二倍角公式化成 ${\frac {\sqrt {bc((b+c)^{2}-a^{2})}} {(b+c)}}$
内切圆半径: 设 $P$ 为半周长,
我们有 $r={\frac {S} {P}}={\frac {asinBsinC} {(sinA+sinB+sinC)}}={\frac {asinBsinC} {(sinBcosC+cosBsinC+sinB+sinC)}}={\frac {asinBsinC} {(sinB(cosC+1)+(cosB+1)sinC)}}={\frac {asin({\frac {B} 2})sin({\frac {C} 2})} {sin(\frac {B+C} 2)}}=4Rsin({\frac A 2})sin({\frac B 2})sin({\frac C 2})$
也有 $r={\frac {S} {P}}={\sqrt {{\frac {(P-a)(P-b)(P-c)} {P}}}}$ ,又因为 ${\frac r {P-a}}=tan({\frac A 2})$ ,全换了就有 $r=Ptan({\frac A 2})tan({\frac B 2})tan({\frac C 2})$