程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 二進制-初學C……求助float有效數字的問題

二進制-初學C……求助float有效數字的問題

編輯:編程綜合問答
初學C……求助float有效數字的問題

關於浮點數有效數字我有很多疑惑,我發現我讀入一個浮點數後再輸出,兩個數字是不相等的。開始我以為是我輸入的數字超過了float有效數字位數的原因,但是下面這個程序證明不是這個原因:

#include <stdio.h>
#include <float.h>
int main(void)
{float test;
char data[7];

printf("Float has at least %d effective numbers\n", FLT_DIG);
printf("Then i'm gonna check it!\n");
printf("test data:_______\b\b\b\b\b\b\b");
scanf("%f",&test);

printf("please input again to confirm it:_______\b\b\b\b\b\b\b");
scanf("%s",&data);

printf("So %f is supposed to be %s", test, data);

return 0;
}

就是先查了一下我的機子規定float至少幾個有效數字,然後輸入一個數字,輸兩邊,一次存成float,一次存成字符串,最後檢驗float是不是真有這麼多有效數字
結果:
圖片說明

這是怎麼回事啊……我大概知道為什麼會有這種情況,就是計算機把十進制轉二進制存儲再轉十進制的過程出了問題……可是明明是機器告訴我有至少六位有效數字,那我輸個六位有效數字的數不應該會出錯的吧?

不知道哪位朋友能給我解答一下……是程序寫錯了嗎?還是說有效數字的問題我理解錯了?怎麼樣能讓數值准確的輸出呢?按照這種情況,豈不是大部分的運算的都是不准確的?

最佳回答:


float數據 機器內是2進制數,
1位符號位
8位指數位
23位“尾數”位
共32 位 2進制數。
平時講 有效數字 是6~7位 ,指10進制。

通常程序輸入的數是10進制,進入機器後要化成2進制,計算完又轉十進制輸出。
10進制到2進制,2進制到10進制 轉換,有的數化不淨,有的數化得淨。
如同10進制分數化10進制小數,有的化得淨(例如 4分之1,變0.25),有的化不淨(例如 3分之1,變0.33333....)。

10進制到2進制,2進制到10進制 轉換,化得淨的效數字7位,化不淨的效數字6位,因為最後一位有捨入誤差。
例如:
float x,y;
x=0.51; // 化不淨
y=0.5; // 化得淨
printf("x=%.8f y=%.8",x,y); // 輸出 0.50999999 0.50000000

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved