簡體   English   中英

MIPS組裝中的浮點精度

[英]floating point accuracy in MIPS assembly

我在MIPS程序集中為以下表達式編寫了兩個代碼文件:

R(n)=(i至n)SUM {(i + 2)/(i + 1- 1 / i)-i /(i + 1 / i)}

一部代碼將整個表達式R(n)計算為總和並給出結果。

第二代碼首先在循環中計算第一項,即(i + 2)/(i + 1-1 / i) ,然后在另一個循環中計算第二項,即i /(i + 1 / i) 然后簡單地將兩個和相減。

以下是兩個程序對於n的不同值的結果:

程序1:

 N        Result
-----------
10        5.07170725

100       7.41927338

1000      9.72636795

10000    12.02908134

100000   14.33149338

1000000  16.63462067

程式2:

 N       Result
---------
10       5.07170773

100      7.41923523

1000     9.72259521

10000   12.31250000

100000   8.61718750

1000000  6.50000000

程序1給出的結果更准確(與Wolfram Alpha的R(n)結果相比)。 為什么程序2對於大的n值在這里給出奇數結果? 我的問題與此處的浮點精度有關。

注意:我使用的是單精度數字。

假設您有un = an-bn,並且想要求和(un)

lim an-> 1,當n->無窮大時,P個項的總和趨於P + cte_a,對於bn相同,總和趨於P + cte_b

當您將(P + cte_a)-(P + cte_b)進行區分時,應從數學上檢索sum(un)。

但是對於浮點數,不會發生這種情況,因為(P + cte_a)會四舍五入到最接近的浮點數。 P越大,float(P + cte_a)-float(P)越接近cte_a ...

為了說服自己,請嘗試評估以下操作:

10.0f+0.1f-10.0f
100.0f+0.1f-100.0f
...
1.0e7f+0.1f-1.0e7

lim un-> 1 / n(當n->無窮大時),因此程序1的性能更好...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM