在說明此文時,必須特別強調一件事,如果現在初學者的你還在思考:”要怎麼學Visual C++”、”要選Visual C++還是Borland C++”、”作業要用 Visual C++ 還是要用 Dev-C++ 寫比較好?”,那我只能跟你說:誰沒菜過?但你一定要看完以下的說明。
在說明此文時,必須特別強調一件事,如果現在初學者的你還在思考:”要怎麼學Visual C++”、”要選Visual C++還是Borland C++”、”作業要用 Visual C++ 還是要用 Dev-C++ 寫比較好?”,那我只能跟你說:誰沒菜過?但你一定要看完以下的說明。
C/C++ 標準之 main 寫法有二種,一種是不接受任何參數列;另一種是接受二個參數列。程式碼大致如下
int main(int argc, char **argv) { return 0; } int main(void) { return 0; }
吾人本身一陣最常用到的二個運算: Sqrt, 1/Sqrt,於是會找些奇淫怪技想辦法加速。
事實上在做 Sqrt 加速時,實測之結果效能都沒 VC 開 O2 來得快,即使只求整數之 sqrt 之演算法效果也沒很好,所幸在 codeproject 看到有人已實測,該程式碼共寫了 14 份 sqrt,有興趣可去下載下來看看,其中 asm 崁入的有 2 份,測出來結果都比內建的還快,且精度也完全正確。以下為該作者提供之 2 份 sqrt,實測出來約比內建 sqrt 快上 20% 左右 (11390 : 8922),其它的 12 種方法若有興趣,也可再進行實測。
這是個讓 CS 領域驚豔的計算方式,同時裡面使用的 magic number - 0x5f3759df 拿去 google 可得到一狗票的東西,本文並不進行 magic number 之推導,整個推導最詳盡的,應是 這篇pdf 。一開始的原始碼長得像這樣 (轉自 wiki)
float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // evil floating point bit level hacking [sic] i = 0x5f3759df - ( i >> 1 ); // what the fuck? [sic] y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed return y; }
自定函式效能測試為常用之一環,吾人日前同一個函式 (log2) 進行了大量之測試 (有15個副函式要測試),由於之前都「亂寫」,故在維護、新增、移除掉副函式時都不方便,於此提供一些基本之技巧與心得。
1. 測試前註明環境規格
一開始也沒想到這個問題,但之後認真研究排列組合中的子集合時,卻發現有必要使用到 log2 此函式。在 cmath (math.h) 裡面,提供 log 與 log10 函式,其中 log 即為 ln;但log2 函式卻視 compiler 決定是否支援,吾人手邊之 MSCV 不論哪個版本均無 log2 這個東西,故特撰此文。下述將先探討一些問題,再進行解法與說明。
本文所探討之 log2,以求得整數為主,求得小數之浮點數,日後再予以探討,文中提供約五種方法以說明。
"怎麼學c語言、怎麼挑書、要挑什麼書",這個問題聽過蠻多遍了,提供自己學習 C/C++ 的歷程讓各位參考。以下的說明都是以個人主觀的立場,當然我不是什麼大師,這些都參考就好。由於當初筆者接觸時,就是 C ,若想學其它像是 VB, JAVA, C# 等程式語言,這篇文章仍可給予一些幫助與參考。
1. 請先進修基礎知識
這問題實在看了很多人問,但大多是視窗程式還沒學過,只學到 Console 下之程式設計便問要怎麼畫波形圖。在 Console 下畫不是不能畫,可以說是「不習慣」,也可以說是「不好畫」。
這問題我用四種不同方法解過 -
前言
這系列文章主要是在研究如何增進檔案寫入之速度,若寫檔之次數、大小均沒一定數量時,這系列文章並不會引起興趣,可跳過。但通常讀取次數增多時 (通常 > 50 MB),便會感覺用 fscanf 速度不夠快,於是有要加速之需求,此系列文章便是在探討是否有其它方法使讀寫檔案方式能增快。
前言
這系列文章主要是在研究如何增進檔案寫入之速度,若寫檔之次數、大小均沒一定數量時,這系列文章並不會引起興趣,可跳過。但通常寫入次數增多時 (通常 > 50 MB),便會感覺用 fprintf 速度不夠快,於是有要加速之需求,此系列文章便是在探討是否有其它方法使讀寫檔案方式能增快。