關於 C 程式設計的一道題,有哪些解決思路?

時間 2021-05-31 12:53:30

1樓:

#明明知道出題人想問什麼偏不這樣答系列

float/double精度不夠的時候使用__float128就行。

inline

__float128

Sqrt

(__float128x)

void

print

(__float128x,

intK=50

)inty=

0,t;

while(x

>=1)

x*=0.1Q,++

y;if(

!y)printf

("0."

);for

(inti=

1;i<=

max(y,

K);++i

)printf("

\n");}

intmain

()輸出:

p.s. 手寫一些函式的原因是不想裝其他庫了...

2樓:

求根公式是

但在 ac 的絕對值相比 b 很小的時候,上面的 與 b 就會很接近,做減法時會產生較大的精度損失。這是典型的在數值計算中需要避免的「值接近的數相減」的情況。

既然問題出在浮點計算誤差造成精度不穩定,解決辦法自然是改用數值穩定的演算法。也就是通過等價變換,避免這種「值接近的數相減」的情況。

為此如果查成熟的文獻,如 NUMERICAL RECIPES [1] 就可以找到穩定的求根公式。定義:

於是有及

這個公式中符號函式的作用就是讓 b 總和判別式同號相加,而不是相減。

其實,用原來的求根公式也一樣,通過判斷符號要求出乙個低誤差的根後,利用韋達定理(根與係數關係)求出另一根即可。這也就是

Milo Yip 引用維基百科上的做法。

除了這種使用符號函式判斷的求根方式,還有一種方式是利用等價變換

得到其中乙個根

其中第乙個等號後是函式定義,第二個等號後的比較技巧的變形演算法是數值穩定的,可以正確處理 x 絕對值很小的情況。另乙個根同樣用韋達定理求出。

採用這種技巧不僅可以避免使用符號函式,而且方便處理係數為複數的情況——顯然 b 是虛數時再計算其正負號就無意義了。不過仍然需要單獨處理 b=0 的情形。

當然,如果是寫通用的二次方程求根函式,還要考慮二次係數為零造成方程退化特例,複雜的分支是避免不了的。

這裡給出用上面另一公式的解法(把 double 改成 float,數字常量 1.0 改成 1.0f 等,也是可以的):

#include

#include

#include

using

std::

complex

;complex

>sqrt1pxm1

(complex

>x)// 返回根的個數和兩個復根

std::

tuple

complex

>,complex

>>quadratic_roots

(complex

>a,complex

>b,complex

>c)elseif(

c==0.0)

else

}elseif(

b==0.0)

else

}void

test_quadratic_roots

(complex

>a,complex

>b,complex

>c)}std

::cout

<

endl;}

intmain(),

,);// 復係數

3樓:靈劍

主要的問題是根本沒有一種內建的型別能處理這個精度,常用的double連表示出10^20+1與10^20的差異都做不到。除了用高精度的decimal型別強行算(一般這種型別可能不支援指數、正余弦之類的,需要自己實現)以外,可以在某個點附近,將兩個根展成微分近似的形式,從而解

x^2 + (10^20 + 1 + c)x + 10^20 = 0這一類的二次方程。

c 菜鳥關於上課一道例題中private的疑問,求解惑?

熊起 給初學程式設計的人講物件導向,非常容易出現這種誤解,這不怪學生怪老師。軟體工程的隱藏公開是對開發者講,具體說就是某個模組某個類的維護者 但以自然思維配合物件導向ABC很容易把隱藏公開理解成某個object的許可權。 賀可夫 string getinfo 其實完整的解釋是string getin...

C語言的一道填空題,是怎麼理解的?

勝勳 有必要這麼複雜嗎?直接3層for不就OK?include inta,b c int main 答案有4組 公雞,母雞,小雞 0,25,75 4,18,78 8,11,81 12,4,84 者也 百錢買百雞是個經典數學問題。最常見解法是窮舉法。即採用三重迴圈或二重迴圈對取值範圍內的數值一一驗證。...

一道關於人力招聘的情景模擬題,面試官無法到場該怎麼辦

momocat 分兩頭說。一方面安排候選人,讓其安心落座,填寫應聘資料。另一方面盡快與面試官取得聯絡。如果面試官回覆會晚點到,那就安撫候選人,讓其耐心等待。這時人力資源部門可以將公司的對外宣傳資料給其翻閱,並簡單的介紹一下公司情況,如果可以的話帶對方參觀一下公司,效果更好。如果面試官仍然沒有回覆或確...