数值分析01BackgroundAndBasis

第一题

对于单精度浮点数 01000001000101100110011001100110 = 同理,01000001000100000000000000000000 = 00111110110011001100110011001101 =

对齐小数点位得到(小阶向大阶):

两者相减得到: -0.0000000000000000000000001101 × 2^3 格式化再截位后得到: -1.1010000000000000000000 ×2^-22 化成十进制: -6.5 × 2

在C语言程序中计算可以得到结果确实正确


第一题程序结果|保留12位小数

第二题

对于优化算法,采用秦九韶算法对计算过程进行优化。 由于编译器本身对于算法的优化,也就是当编译程序发现某一段代码在重复的做无用功后,会直接忽略该段代码(在gcc高版本上存在),导致无法直接计算10^9次循环,所以在程序中采用了数组存储结果来避免被优化。 程序中时间差值较小(我看见有同学的优化算法是差不多直接算法用时的1/10),我分析是优化算法的本身时间其实是比较小,而占大头的应该是将结果储存在数组中的用时。

所以差值只能体现两种算法的用时差值,得不到优化算法是直接算法效率的多少倍之类的说法。不过即使是差值也能体现优化算法的优越性了。


第二题的结果

第三题

对于公式 使用分部积分得到: 得到正向和逆向的递推公式:

在计算机中为了计算方便,使用双精度浮点数储存并保存12位小数。 使用软件Mathmatica 进行先验计算得到:


试验结果|序号|正向|逆向|

可以看出,正向递推的结果从开始误差开始明显增大,而逆向递推的结果保持稳定。 正向递推误差会随着递推次数增加而不断增加,每次扩大大约倍;而逆向递推的误差会随着次数增加而减少,误差每次减少约 倍。由此可见,逆向递推的误差和稳定性都明显优越于正向递推。 设精确值为 那么正向递推: 逆向递推: