C語言 int,float,double整型和浮點型資料在相互運算時bug原因
先看一段程式碼:
#include <stdio.h>
int main ()
{
double a;
int b,c;
b = 5,c=6;
a = b/c;
printf("%f\n",a);
return 0;
}
>>>
0.000000
Press any key to continue
按理來說,a應該等於0.833333。但是結果a等於零。
這是因為,程式先整數計算b/c,此時的輸出實際上是被截去了小數部分,再轉化為float的數。故應該把bc定義為浮點型別。
再看一個例子:
#include <stdio.h>
#include <math.h>
int main()
{
int i=1,d=1,t;
double pi=0.0;
for (;;d++,i+=2)
{
if (d % 2 == 0) t = -i;
//第偶數個式子是負數
else (t = i);
if (fabs(1/t) < (1e-6)) break;
//fabs(x),對雙精度x求絕對值,得到結果是雙精度型
pi = pi + (1/ t);
}
pi = pi*4;
printf("pi = %f\n",pi);
return 0;
}
>>>
pi=4.00000
Press any key to continue
這是一個求π的小程式。其演算法是:
為什麼得到的結果是pi = 4.00000呢?
原因和第一個例子一樣,由於我們定義t為整型,而fabs和pi都是雙精度型,故在計算 1 / t 時,程式先整數計算1 / t ,取整數部分,再對其轉換為雙精度型。因此,迴圈體只執行一次,在 t = -3 時,fabs() = 0,執行break,退出迴圈。
為使得程式正常執行,我們應該把t定義為雙精度型。
#include <stdio.h>
#include <math.h>
int main()
{
int i=1,d=1;
double pi=0.0,t;
for (;;d++,i+=2)
{
if (d % 2 == 0) t = -i;
else (t = i);
if (fabs(1/t) < (1e-6)) break;
pi = pi + (1/ t);
}
pi = pi*4;
printf("pi = %f\n",pi);
return 0;
}
>>>
pi = 3.141591
Press any key to continue
相關文章
- c語言中%f輸出double型和float型值C語言
- C/C++_int/float/double的最大值和最小值C++
- (C語言) int型之間除法運算,向零取整C語言
- [C語言] 浮點型儲存C語言
- c語言字串與整形,浮點數...相互轉換C語言字串
- c++ 基本資料型別(int、float、double、long、long long)最大值,最小是表示方法C++資料型別
- c中int型和浮點型的格式話輸出
- Python做浮點數(float)運算要小心Python
- float double 型別資料極值表示型別
- FLOAT:浮點數值資料的大致數值資料型別資料型別
- c++ float 計算時注意點C++
- C語言基礎-1、邏輯型別和運算C語言型別
- C# float浮點數與二進位制相互轉換(IEEE754)C#
- int/double資料範圍
- C語言位運算C語言
- xlrd預設將整型轉為浮點型
- C語言資料型別C語言資料型別
- sql server資料庫如何儲存陣列,int[]float[]double[]陣列儲存到資料庫方法SQLServer資料庫陣列
- 【C語言】整型在記憶體中的儲存C語言記憶體
- go語言與c語言的相互呼叫GoC語言
- java double、float型別的比較Java型別
- C語言 列舉資料型別C語言資料型別
- arange浮點型別資料型別
- 計組之資料運算:9、浮點數的表示
- 浮點數在計算機底層的表示及運算計算機
- C語言-變數常量資料型別C語言變數資料型別
- 實驗一 C語言開發環境使用和資料型別,運算子,表示式C語言開發環境資料型別
- 實驗1 C語言開發環境使用和資料型別、運算子、表示式C語言開發環境資料型別
- 實驗一 c語言開發環境使用和資料型別、運算子、表示式C語言開發環境資料型別
- 實驗1 C語言開發環境使用和資料型別,運算子,表示式C語言開發環境資料型別
- C語言 關鍵字const的作用 const int* 和int *const 的區別C語言
- float和double有什麼區別?
- Java 浮點數精確性探討(IEEE754 / double / float)與 BigDecimal 解決方案JavaDecimal
- C語言中,四則運算導致資料型別的轉換C語言資料型別
- Python基本資料型別之浮點型Python資料型別
- Python浮點數(小數)運算誤差的原因和解決辦法Python
- C語言學習筆記——位運算C語言筆記
- C語言進階——基本資料型別01C語言資料型別