問題2:double型浮點數能精確到多少位小數?或者,這個問題本身值得商榷?
既然double是浮點數,它的小數點的位置是“浮動”的,所以很難說double類型能精確到小數點後面幾位。通常這個關於精度的問題都是通過它能表示的有效數字(十進制)的位數來表示的。遵循IEEE標准的8字節(64位)的double能表示的有效數字的位數是:15 ~ 16
測試一個:
#include <stdio.h> int main(){ printf("%.20lf",1.0/3.0); }
結果:
可見在第17位小數(有效數字)處數字發生了失真,所以應該是16位
問題3:double型浮點數最大正數值和最小正數值分別是多少?(不必特別精確)
這種方法幾乎算不出:
#include <stdio.h> int main(){ double a = 0, b = 0; while(a<=b){ a = b; b++; } printf("%f",a); }
問題4:邏輯運算符號“&&“,”||“,”!“ 的相對優先級是怎樣的?
#include <stdio.h> int main(){ int a = 0, b = 1, c = 1; printf("%d",a&&b||c); }
輸出為1, 可見&&>||
#include <stdio.h> int main(){ int a = 0, b = 0; printf("%d",!a&&b); }
輸出為0, 可見!> &&
綜上!>&&>||
另外注意C語言中的邏輯運算符都是短路運算符,一旦能夠確定整個表達式的值,就不再繼續計算
6位
單精度浮點型 float 32位 約+-(E-38~E38)
雙精度浮點型 double 64位 約+-(E-308~E308)