wine中complex::pow 補丁的實現

來源:互聯網
上載者:User

標籤:wine   開源   linux   complex   補丁   

我發了一個wine的補丁,實現complex::pow的部分重載:http://source.winehq.org/patches/data/104267

HongQian幫我在irc上問了Piotr對這個補丁的看法,他說:
“it generally looks ok but it‘s possible to implement it with better
precision, so I‘m not sure what to think about it”

“我想了想發現,其實我們在實現complex::pow
在指數為實整數的情況下的重載的時候,沒有必要先把實整數轉換為複數的。一開始我是為了簡化補丁的難度,就建議參考最像的函數進行實現,沒有充分考慮到精度的問題。”

我去查了一些資料,發現,以前初學C\C++用pow函數的時候有點疑惑,為什麼參數int要轉化成double,以為是系統規定的,當時為了編譯能過就用了轉換了,也沒有看原始碼的想法。今天才知道,原來是考慮到那麼幾個問題(overflow、負數次冪的結果)等才用double的,而且還提高了複用,感覺設計得很好~(除了給人一點點confuse)


然後我做了測試,這是在win下的結果:

pow(complex_float= (3.14159f, 0), 3):  (31.006203,0.000000)complex_translation:  (31.006201,0.000000)*******************************************************pow(complex_float= (32.1234f, 0), 6):  (1098826752.000000,0.000000)complex_translation:  (1098826624.000000,0.000000)*******************************************************pow(complex_float= (7.12f, 0), 6):  (130280.640625,0.000000)complex_translation:  (130280.648438,0.000000)

*******************Now is complex_double************************************

pow(complex_double= (3.14159/2, 0), 3):  (3.875775, 0.000000)double_complex_translation:  (3.875775, 0.000000)*******************************************************pow(complex_double= (32.12345678, 0), 13):  (38787300223012692000.000000, 0.000000)double_complex_translation:  (38787300223012684000.000000, 0.000000)*******************************************************pow(complex_double= (7.12, 0), 33):  (1354689579078 5450000000000000.000000, 0.000000)double_complex_translation:  (13546895790785442000000000000.000000, 0.000000)*******************************************************

現在決定用用手寫的底數為複數而指數為整數次冪的pow來解決

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.