東京大学 情報理工学系研究科 コンピュータ科学専攻 2016年8月実施 専門科目II 問題1
Author
祭音Myyura (co-authored with GPT 5.6 SOL)
Description
回答下列问题。
(1)用 cosα,sinα,cosβ,sinβ 表示 cos(α+β) 和 sin(α+β)。
(2)设 0≤α<π/2,用 cosα,sinα 表示 cos(α/2) 和 sin(α/2)。
(3)有限精度下,直接使用第(2)问公式在 α 接近 0 时是否会丢失有效数字?若会,改写公式以避免该问题。
(4)设
α=2πi=1∑Nbi2−i,bi∈{0,1},
并定义 αn=2π∑i=1nbi2−i。
- 用 cosαn,sinαn 表示 cosαn+1,sinαn+1;
- 设计只使用四则运算和开平方计算 cosα,sinα 的算法。
(5)定义 cosha=(ea+e−a)/2、sinha=(ea−e−a)/2。设 0≤x<1 有有限位二进制表示,设计只使用四则运算和开平方计算 cosh(xloge2)、sinh(xloge2) 的算法。
Kai
(1)
cos(α+β)=cosαcosβ−sinαsinβ,
sin(α+β)=sinαcosβ+cosαsinβ.
(2)
因 0≤α/2<π/4,两根均取正号:
cos2α=21+cosα,sin2α=21−cosα.
(3)
α≈0 时 cosα≈1,计算 1−cosα 会发生相近数相减,导致 sin(α/2) 丢失有效数字。利用
1−cosα=1+cosαsin2α
改写为
sin2α=2(1+cosα)sinα.
cos(α/2) 的原公式没有该消减问题。
(4)
令
θn+1=2n+2π,αn+1=αn+bn+1θn+1.
记 Cn=cosαn,Sn=sinαn,c=cosθn+1,s=sinθn+1,则
(Cn+1,Sn+1)={(Cn,Sn),(Cnc−Sns, Snc+Cns),bn+1=0,bn+1=1.
算法从 (C0,S0)=(1,0) 开始。先置
c1=s1=21
(对应 θ1=π/4),并递推
ci+1=21+ci,si+1=2(1+ci)si.
按 i=1,…,N 依次用上面的加法公式:若 bi=1,就把 (C,S) 更新为
(Cci−Ssi,Sci+Csi);若 bi=0 则不变。最终 (C,S)=(cosα,sinα)。全过程只含四则运算与开平方。
(5)
写成 x=∑i=1Nbi2−i。从 r0=2 开始反复开平方,得到
ri=ri−1=22−i.
令 q=1,对每个 bi=1 乘上 ri,则
q=i=1∏Nribi=2x=exloge2.
因此
cosh(xloge2)=2q+q−1,sinh(xloge2)=2q−q−1.