以下提及 http://floating-point-gui.de/errors/propagation/
浮点乘法和除法是安全的。对各种乘法链进行经验测试也表明丢失的精度位数往往在O(logn)中,其中n是乘法链的大小。但是下面的分析倾向于说每次乘法都可能会松散一点。
考虑我们有一个数字,c =(m)2 ^ e 其中1 <= m <1。 2,是尾数 u是ulp(1),e是指数。 然后
c * c =([mm] + u / 2)2 ^(2e)
[mm]表示乘法后的m * m的舍入值。
然后,c *(c * c)=([mmm] +(m + 1)u / 2)2 ^(3e)
c *(c *(c * c))=([mmmm] + m((m + 1)u / 2)+ u / 2)2 ^(4e)
...
c *(c * ... n term)=([mm ...] +(m ^(n-2)+ m ^(n-3)+ ... + 1)u / 2) 2 ^(NE)
因此指示丢失的指数ulps导致n个精度位的限制丢失。 (日志(M ^(N-1)))
我在这个分析中遗漏了一些东西,因为根据经验,这并不成立。
谢谢,