2011年6月9日 星期四

資料型態 DataType

程 式在執行的過程中,需要運算許多的資訊,也需要儲存許多的資訊,資訊是儲存在記憶體空間中,由於資料的型態各不相同,在儲存時所需要的容量不一,不同的 資料必須要配給不同的空間大小來儲存,因而有了「資料型態」(Data type)的規範。

C++中基本的資料型態主要區分為「整數」(Integer)、「浮點數」(Float)、「字元」(Character),而這幾種還可以細分,如下所 示:
整數
用 來表示整數值,可以區分為short、int、與long,可容納的大小各不相同,short的長度為半個word,int表示一個word,而long 可能是一個或兩個word,在32位元機器上int與long的長度通常是相同的,型態的長度越長,表示可表示的整數值範圍越大。
浮點數
用 來表示小數值,可以區分為float、double與long double,float的長度為一個word,double的長度為二個word,long double長度為3或4個word。
字元
用 來儲存字元,長度為1個位元組,其字元編碼主要依ASCII表而來,由於字元在記憶體中所佔有的空間較小,所以它也可以用來儲存較小範圍的整數。


以上的資料型態在記憶體中所佔有的大小依平台系統而有所差異,word的大小取決於機器,在32位元機器上通常一個word是4個位元組,如果想要知道這 些資 料型態在您所使用的平台上,所佔有的記憶體空間有多少,最好的作法是使用sizeof()運算子,它可以告訴您確實的記憶體大小,下面這個程式是個簡單的示範(64 bit):


Data type       (bytes)
int     4
long    8
float   4
double  8
char    1

參考資料
http://en.wikipedia.org/wiki/C_data_types
http://en.wikipedia.org/wiki/Integer_(computer_science)
http://caterpillar.onlyfun.net/Gossip/CppGossip/DataType.html
C code 與 assembly output 交叉出現

2011年5月31日 星期二

C floor

a=0.3/0.0125;
printf("a1=%f\n", a);
printf("floor(a1)=%g\n", floorf(a));

a=floorf(0.3/0.0125);
printf("a1=%f\n", a);


printf("%f\n", floor((0.3/0.0125)));


a1=24.000000
floor(a1)=24
a1=24.000000
23.000000


在C 和Fortran 得到的結果不一樣, 原來在C 語言中要用floorf!! XD

補充

ceil(x) 返回不小于x的最小整数值 (天花板)
floor(x) 返回不大于x的最大整数值 (地板)
round(x) 返回x的四舍五入整数值

2011年5月18日 星期三

HPCC notes

修改CCFLAGS,如果用mpich,是$(HPL_DEFS) -fomit-frame-pointer -03-funroll-loops -W –Wall,

用openmpi就要修改成 $(HPL_DEFS) -03


HPL 產生器
http://www.advancedclustering.com/faq/how-do-i-tune-my-hpldat-file.html


HPCC inf 說明
http://onetfbao.spaces.live.com/blog/cns!393E9866CAB6E396!367.entry 
http://www.orientsky.com.cn/_new/Printpage.asp?ID=1496
http://onemansjourneyintolinux.blogspot.com/2009/01/hpl-tuning.html

如何做Linpack测试及性能优化
曹振南
http://www.netlib.org/benchmark/hpl/faqs.html

2011年5月4日 星期三

python 處理參數時的做法

sys.argv
getopt

http://www.faqs.org/docs/diveintopython/kgp_commandline.html

global variable in python

在Python 中修改到全域變數時要宣告global


globvar = 0
def set_globvar_to_one():
    global globvar    # Needed to modify global copy of globvar
    globvar = 1
def print_globvar():
    print globvar     # No need for global declaration to read value of globvar

set_globvar_to_one()
print_globvar()       # Prints 1