日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浮点数据类型

發布時間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浮点数据类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 浮點數的內存表示
      • 1.1 內存中的浮點數
      • 1.2 浮點數的轉換
      • 1.3 浮點數的不連續
      • 1.4 浮點數的大數吃小數問題
    • 2 浮點數據輸出控制和精度
      • 2.1 浮點數據的輸出控制
      • 2.2 浮點數據的精度

1 浮點數的內存表示

1.1 內存中的浮點數

浮點數在內存中的存儲方式為:符號位、指數、尾數。

float和double類型的數據在計算機內部的表示方法是相同的,但由于所占存儲空間的不同,其分別能夠表示的數值范圍和精度不同。

浮點數的特殊情況:

1.2 浮點數的轉換

浮點數的轉換步驟:

  • 將浮點數轉換成二進制。
  • 用科學計數法表示二進制浮點數。
  • 計算指數偏移后的值。
  • 注意:計算指數時需要加上偏移量,而偏移量的值與類型有關。

    對于指數6,偏移后的值如下:

    • float:127 + 6 ? 133
    • double:1023 + 6 ? 1029

    轉換示例:

    通過unsigned int類型的指針將浮點數的內存表示打印出來:

    #include <stdio.h>int main() {float f = 8.25;unsigned int* p = (unsigned int*)&f;printf("0x%08X\n", *p);return 0; }

    1.3 浮點數的不連續

    思考:int和float都占4個字節的內存,為什么float卻比int的范圍大的多呢?

    浮點類型的特點:

    • float能表示的具體數字的個數與int相同。
    • float可表示的數字之間不是連續的,存在間隙。
    • float只是一種近似的表示法,不能作為精確數使用。
    • 由于內存表示法相對復雜,float的運算速度比int慢得多。

    注意:double與float具有相同的內存表示法,因此double也是不精確的。由于double占用的內存較多,所能表示的精度比float高。

    1.4 浮點數的大數吃小數問題

    浮點數的加法需要先對階,再計算,以0.5加0.125為例,計算過程如下:

    我們可以看到在對階的過程中,當大數比小數大很多時(大概是1600萬倍時),小數由于右移而導致全部數據移出變為0。


    2 浮點數據輸出控制和精度

    2.1 浮點數據的輸出控制

    #include<iostream> #include<Windows.h>using namespace std;int main(void){double value = 12.3456789;// 默認精度是6,所以輸出為 12.3457 //(默認情況下,精度是指總的有效數字)cout << value << endl; // 把精度修改為4, 輸出12.35, 對最后一位四舍五入// 精度修改后,持續有效,直到精度再次被修改cout.precision(4);cout << value << endl;// 使用定點法, 精度變成小數點后面的位數// 輸出12.3457cout.flags(cout.fixed); cout << value << endl;// 定點法持續有效// 輸出3.1416cout << 3.1415926535 << endl;// 把精度恢復成有效數字位數cout.unsetf(cout.fixed);cout << value << endl; //輸出12.35cout << 3.1415926535 << endl; //輸出3.142system("pause");return 0; }

    2.2 浮點數據的精度

    #include <Windows.h> #include <iostream>using namespace std;int main() {float f = 0.123456789f;double d = 0.123456789123456789;cout.precision(9);cout.flags(cout.fixed); //輸出0.123456791,float類型的數據精度為7位cout << f << endl;cout.precision(18); //輸出0.123456789123456784,double類型的精度為16位(測出來17位,巧合?)cout << d << endl;system("pause");return 0; }

    參考資料:

  • C語言進階剖析教程
  • C/C++從入門到精通-高級程序員之路【奇牛學院】
  • 總結

    以上是生活随笔為你收集整理的浮点数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。