CODE:
#includ main (){ int i; float f; i=67108863;//i=2^26-1 f=67108863;//i=2^26-1 printf("interger of 2^26-1: %d\n",i); printf("floating number of 2^26-1: %.1f\n\n",f); i=100000000-1; f=100000000-1; printf("interger of 100000000-1: %d\n",i); printf("floating number of 100000000-1: %.1f\n",f); }OUTPUT:
interger of 2^26-1: 67108863
floating number of 2^26-1: 67108864.0
interger of 100000000-1: 99999999
floating number of 100000000-1: 100000000.0
以上的結果,可以得知當數字比較大的時候float會有誤差,起因是因為,float在電腦的世界裡是用科學記號表示,也是像100=1.0*10^2的這種方式表示(詳見wiki),而single float(也就是float,相較於double float)可以表示的數字為1後面小數點23位(這裡是指2進位時,也就是1.1111111…),超過時會用一種「類似」四捨五入的方式處理(實際是電腦會選擇進會或捨去,讓數字是一個偶數),所以當我們要表示的數字大於2^24方時,就產生上面第一個例子的問題,莫名其妙被進位了....
另外float在計算的時候,會把次方小的對齊次大的(也就是1.0*10^3+1.0*10^2會把1.0*10^2變成0.1*10^3)然後做相加,於是就造成了第二種範例的結果!
你好,我想问一下int型数值可以和float型数值比较大小吗?
回覆刪除