我正在研究大規模仿真的高速計算問題。爲了加速這個過程,我希望做一些優化,其中之一就是在沒有跳轉的情況下僅僅在幾個週期內計算double的絕對值。C上的雙精度操作C
我的想法是,64位雙值由1位符號位,11位指數和52位尾數表示。因此,雙值異或帶着面具: 千萬00000000 00000000 00000000將產生期望的結果:
double abs(double x) {
double mask = -0.0e0;
return x^mask;
}
現在很明顯有幾個原因,一個需要在雙打二進制運算,因此自然編譯器會引發錯誤:
error: invalid operands to binary^(have ‘double’ and ‘double’)
我想知道是否有什麼辦法可以使在快時尚這個工作,因爲我不希望整個事情轉換成字符數組,並早在別處被提出。這會打破快速計算的目的。
我感謝所有幫助...
So 1 + 8 + 23 = 64.好的,今天我學到了一些新東西。 – 2013-12-08 19:44:30
除此之外,您需要通過具有適當寬度的整數的聯合來輸入「double」;剩下的就留給你作爲練習。 **等等,不。**不要擔心「優化」。你怎麼知道這會比標準庫附帶的股票'abs()'更快?你有基準嗎? (提示:不,它不會,也不會,你沒有。) – 2013-12-08 19:46:02
我同意基準是至關重要的,並且似乎不太可能是股票'abs'的重大改進。但他們將無法對它進行基準測試,直到他們實現它爲止...... –