亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何自己編寫冪函數?

我如何自己編寫冪函數?

幕布斯6054654 2019-09-21 14:00:53
我一直想知道如何創建一個自己計算功效的函數(例如2 3)。在大多數語言中,這些都包含在標準庫中,大部分是pow(double x, double y),但是我該如何自己編寫呢?我當時在想for loops,但它認為我的大腦陷入了循環(當我想使用非整數指數(例如5 4.5或負數2 -21)進行冪運算時,我變得瘋狂了;)那么,我該如何編寫一個計算實數冪的函數?謝謝哦,也許需要注意的重要一點:我不能使用使用冪的函數(例如exp),這最終將使它無用。
查看完整描述

3 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

通常pow(double, double),數學庫中函數的實現基于身份:


pow(x,y) = pow(a, y * log_a(x))

使用此標識,您只需要知道如何將單個數字a升為任意指數,以及如何采用對數底數即可a。您已經有效地將一個復雜的多變量函數轉換為一個變量和一個乘法的兩個函數,這很容易實現。最常見的選擇值a是e或2- e因為e^x和log_e(1+x)有一些非常漂亮的數學特性,并且2因為它具有用于浮點運算執行一些不錯的性能。


做這種方式的缺點是,(如果你想獲得完全精確),你需要計算的log_a(x)項(以及它與產品y)比的浮點表示更高的精度x和y。例如,如果x和y是雙精度數,并且想要獲得高精度結果,則需要想出一些方法以更高精度的格式存儲中間結果(并進行算術運算)。Intel x87格式和64位整數一樣是常見的選擇(盡管如果您確實想要高質量的實現,則需要執行一些96位整數計算,這在某些情況下會有些痛苦語言)。如果實施powf(float,float),則處理起來要容易得多,因為那樣就可以使用double用于中間計算。如果您要使用這種方法,我建議從此開始。


我概述的算法不是唯一可行的計算方法pow。它只是最適合提供滿足固定先驗精度范圍的高速結果。它在某些其他情況下不太合適,并且比其他一些人建議的重復平方根算法肯定更難實現。


如果要嘗試使用重復平方[root]算法,請首先編寫一個僅使用重復平方的無符號整數冪函數。一旦掌握了這種簡化情況的算法,您就會發現將其擴展為處理分數指數非常簡單。


查看完整回答
反對 回復 2019-09-21
  • 3 回答
  • 0 關注
  • 816 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號