今天寫**發現乙個很有意思的問題。
**如下:
double sum = 0;
for(i = 11213; i < 11325; i++)
printf("sum = %f\n", sum);
double sum2 = 66.144421;
if(sum == sum2) else
double a = 66.144421, b = 66.144421;
if (a == b)
exit(0);
執行結果如下:
sum列印出來的值和sum2相等,但是與sum2進行比較的時候得到的結果卻是不等的。這種現象應該跟double型別表示的精度有關。
所以當我們比較兩個double值是否相等時,應該採用相減的方式。即:
double sum = 0;
for(i = 11213; i < 11325; i++)
printf("sum = %f\n", sum);
double sum2 = 66.144421;
if(sum - sum2 < 1e-6) else
double a = 66.144421, b = 66.144421;
if (a == b)
exit(0);
在寫**的時候要特別注意這一點,如果程式因為這種原因發生問題,排查起來很困難。 如何正確地寫出單例模式
發表於 2014 08 28 分類於 程式設計 閱讀次數 50513 單例模式算是設計模式中最容易理解,也是最容易手寫 的模式了吧。但是其中的坑卻不少,所以也常作為面試題來考。本文主要對幾種單例寫法的整理,並分析其優缺點。很多都是一些老生常談的問題,但如果你不知道如何建立乙個執行緒安全的單例,不知道...
如何正確地部署防火牆?
防火牆在實際的部署應用過程當中,經常部署在閘道器的位置,也就是經常部署在網內和網外的乙個 中間分隔點 上,而就是在這樣乙個部署的環境中,也還存在著多種方式,且存在著許多 陷阱 本文將對幾種方式進行分析。請閱讀全文 防火牆在實際的部署應用過程當中,經常部署在閘道器的位置,也就是經常部署在網內和網外的乙...
如何正確地在MDK中使用關鍵
筆者在做移植時,將embest ide環境下的例程移到realview mdk的過程中,曾經遇到這樣乙個問題 在生成工程時,編譯全部通過,但在鏈結時提示許多符號未定義!如果讀者也遇到過這個問題,請繼續看下去,如果鏈結時提示未定義的變數是一些內聯函式 即使用了關鍵字 inline 那麼就是筆者遇到的問...