1. 程式人生 > >c語言題目,float精度問題

c語言題目,float精度問題

編寫程式由下面的公式計算ex的值,精確到10e-10.
Ex=1+x+x^2/2!+x^3/3!+x^4/4!+...

#include<stdio.h>.
int main()
{
double x,ex=1.0,t,z;
int i=1,y=1;
scanf("%lf",&x);
t=x;
z=x;
while(z>10e-10)
{
  ex+=z;
  i++;
  y*=i;
  t*=x;
  z=t/y;
}
printf("ex=%lf\n",ex);
}

程式能保證最一個和項的值小於10e-10,間接達到了ex的精度為10e-10,這是程式設計的常用技巧之一。

#include <stdio.h>
int main (void)
{
  float g;
  g = 25.585;
  printf("0.3%f\n",g);

  return 0;
}

執行的結果就是 25.585,這個需要你取一個小數點位數就精確了。。

------------------
不加 0.3的結果是25.584999 和加不加f沒關係..

但事實上來說  如果是12.585就是12.585000沒有問題了,好奇怪

#include<stdio.h>
main()
{
    float a;
    a=20/3;
    printf("%3.1f",a);
    getch();

}

輸出6.0

a=20.0/3

即使6.7了

#include<stdio.h>
int main(void)
{
float a;            
double b;           
b=12345678.1111111111111111;
a=b;
printf("%f\n%.17lf",a,b);
return 0;
}

b=12345678.1111111111111111時,
輸出 float為12345678.00000000   ‘’;‘’
double為12345678.111111112000      為什麼會是17個有效數字,2是哪裡來的?

如果整數部分超過8位,b=12345678111.11111111111111111
float為12345677824.000000     第8位開始的數字是什麼?
double仍然為17個有效數字;

然後就是,兩個浮點數到底是有效數字保留幾位的?

C/C++中,浮點型float用32位二進位制表示,十進位制有效數位為7位;double用64位二進位制表示,十進位制有效數位為16位。值得注意的是,無論 float還是double型,在機內都是按double運算的,區別只在輸出時的有效位數不同。當一個數的實際長度不足要求的位數時,計算機會自動補足——但通常是一個隨機數而不是全0……

C語言中,單精度型資料有效數字約是6~7位,數值範圍是約-3.4e-38——3.4e+38,怎麼得出來的???求解

這個比較複雜,建議你找一下IEEE754標準看一下。 
這個簡單說一下吧: 
在IEEE754標準中進行了單精度浮點數(float)和雙精度數
浮點數
(double)的定義。float有32bit,double有64bit。它們的構成包括符號位、指數位和尾數位。 這些位的構成如下: 種類-------符號位-------------指數位----------------尾數位---- float---第31位(佔1bit)---第30-23位(佔8bit)----第22-0位(佔23bit) double--第63位(佔1bit)---第62-52位(佔11bit)---第51-0位(佔52bit) 取值範圍主要看指數部分: float的指數部分有8bit(2^8),由於是有符號型,所以得到對應的指數範圍-128~128。 double的指數部分有11bit(2^11),由於是有符號型,所以得到對應的指數範圍-1024~1024。 由於float的指數部分對應的指數範圍為-128~128,所以取值範圍為: -2^128到2^128,約等於-3.4E38 — +3.4E38 精度(有效數字)主要看尾數位: float的尾數位是23bit,對應7~8位十進位制數,所以有效數字有的編譯器是7位,也有的是8位 其實這些東西網上都能搜到,遇到不懂的,多在網上找下,希望能幫到你
追問
由於float的指數部分對應的指數範圍為-128~128,所以取值範圍為: 
-2^128到2^128,約等於-3.4E38 — +3.4E38          
既然指數範圍是-128~128,為什麼取值範圍不是-10^128到10^128???而是-2^128到2^128,指數部分只是說指數範圍是這麼多,底數是10吧,能再詳細解釋一下嘛??非常感謝!!
回答
這個是你理解錯誤,float型別的儲存是按二進位制儲存的,指數部分也是按二進位制計算的。
追問
還是不明白,我知道資料都是按照二進位制儲存的,還是不懂怎麼來的,能舉例說明嗎,願聽高見!!非常感謝!!
回答
float型資料儲存是按照二進位制來的,包括指數,舉例來說:8.25,實際上是先轉換成二進位制的科學計數形式即1.0001*2^3,儲存是儲存的這個數,這樣說明白不?
提問者評價
謝謝

因為單精度數值佔用4個位元組,就是32位
第1位表示正負,最後8位表示指數位

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float x=3.5,y=1.5;
    printf("%d\n",(int)x/(int)y );
    return 0;
}

直接將float後面的小數部分cut掉

相關推薦

c語言題目float精度問題

編寫程式由下面的公式計算ex的值,精確到10e-10. Ex=1+x+x^2/2!+x^3/3!+x^4/4!+... #include<stdio.h>. int main() { double x,ex=1.0,t,z; int i=1,y=1; scan

C語言float型別的量和int型別的量運算時這個表示式值的數

比方說: 2.5+3=5.500000 //向上轉型,因為float型精確度比int型高 3.5+6.4=9.900000 //兩個都是float型結果還是float 型 'a'+'b'='ab'//兩個字元相連變成了字串 char a='a';char b='b';a+

通過編寫c語言程序運行時實現打印另一個程序的源代碼和行號

clas 行號 意義 spa clu 可執行 stdlib.h 讀取 進行 2017年6月1日程序編寫說明: 1.實現行號的打印,實現代碼的讀取和輸出,理解主函數中的參數含義。 2.對fgets函數理解不夠 3.對return(1); return 0的含義理解不夠 4.未

快速學習C語言途徑讓你少走彎路

串處理 毫無 深入 中國人 sql 以及 ubi 思維 思路   1.標準C語言能幹什麽?   坦白講,在今天軟件已經發展了半個多世紀,單純的C語言什麽都幹不了。標準C語言庫只提供了一些通用的邏輯運算方法以及字符串處理,當然字符串在C語言看來也是一種操作內存的方法,所以單純

Tinyhttpd - 超輕量型Http Server使用C語言開發全部代碼只有502行(包括註釋)附帶一個簡單的Client

net 事件驅動 免費 好評 lua ansi c tor 這一 通過 - 2. Tinyhttpd tinyhttpd是一個超輕量型Http Server,使用C語言開發,全部代碼只有502行(包括註釋),附帶一個簡單的Client,可以通過閱讀這段代碼理解一個 Htt

UGUI揹包使用MVC框架(c#語言模擬揹包物品載入到自己的揹包

最近也就是了解了下MVC揹包模式,然後試著做了一下,先展示下效果圖吧: 左邊是我虛擬的商店物品,當然你也可以當成另一個倉庫。右邊是另一個倉庫。 左邊的揹包可以看出,是可以隨意換位置的,而且左邊的揹包換位置後放進自己的揹包是不受影響的。 ChessInto程式碼(這段程式碼

手搓一個兔子問題(分享一個C語言問題持續更新...)

大家好,我是小七夜,今天就不分享C語言的基礎知識了,分享一個比較好玩的C語言經典例題:兔子問題   題目是這樣的:說有一個窮苦人這天捉到了一隻公兔子,為了能繁衍後代他又買了一隻母兔子,後來兔子開始生小兔子(一次生一個小兔子),假設兔子不會死亡,第二十次這個窮苦人能有多少隻兔子呢?   題目解析:分析題目我

[小練習] C語言題目

一、題目:   二、C程式:(注意:中文部分是程式註釋,如果編譯器不支援中文,需要把中文刪掉) 1 #include <stdio.h> 2 3 int main() { 4 5 int count_letter = 0; //儲存字母數量

C語言關鍵字淺析-float

### C語言關鍵字淺析系列 ### ### ISO/ANSI C 關鍵字 ### float從單詞的字面上看是“浮動”的意思 在C語言中,float表示一種基本資料型別,浮點型,而且區分於double,float是單精度浮點數型別 如果你瞭解FORTRAN和Pascal語言的話

CC語言開啟讀取檔案

文章目錄 C語言開啟,讀取檔案 一、明明白白我的心 二、程式碼飛起來 三、過程不重要,重點看結果 C語言開啟,讀取檔案 一、明明白白我的心   &nbs

設計模式之單利模式(C#語言描述附視訊下載地址)

今天來介紹所有設計模式中結構最簡單的設計模式單例模式,它的核心結構中只包含一個被稱為單例類的特殊類。 要想完成單例類的設計,我們要遵循一下原則即可: 1、一個類只能有一個例項 2、確保該例項對外有一個訪問入口(保證我們的系統可以從這個入口拿到該類的唯一例項) 3、將單例類的建構函式私有化(private),當

C語言程式解決數制之間的轉化超簡單告別進位制的問題!

1、首先,需要先明白printf()函式的輸出格式控制引數:                           %d:十進位制有符號整數                           %u:十進位制無符號整數                          

簡談二維碼(QRcode)的C語言生成在微控制器平臺的實現

轉載自:https://blog.csdn.net/qq_21475601/article/details/71480028 二維碼又稱QR Code,QR全稱Quick Response,越來越多的在生活中出現,作為一種標識,以其廉價簡單方便的使用很快普及到生活的角角落落。像衣、食、住、行、社

C語言 double int float 運算

原創 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> void  main( ) {          

分享幾本比較好的pdf書籍包括oracle資料庫mysql資料庫C語言程式設計java程式設計以及linux作業系統等

1.個人認為最好的oracle資料庫學習書籍,找了很久,發現內容最全講解最清晰《Oracle PL/SQL程式設計》上下 連結:https://pan.baidu.com/s/1VxvbW070_-KEFKEwY0iFCg  提取碼:rm1e  2.《linux系統程式設計

思路不對努力白費!0基礎學好C語言程式設計必須掌握的學習思路!

計算機行業發展非常快,大學裡的教育基本都跟不上實際的社會需求。如果你所在的學校還在指定大家使用譚浩強的教材,或使用VC6.0來教大家上機實驗,那你不妨看看本文,這裡有一些建議可以幫助你不會脫離社會太遠。 考慮到這是一個過來人感覺很基礎,但是對於初學者又覺得困難重重的問題,我想如果這篇文章

VS2017建立C語言檔案專案

2.安裝並且下載自己所需要的元件 3.安裝完後啟動 4.建立第一個C專案 5.建立檔案 6.編寫程式 7.執行:生成--編譯(Ctrl+F7) 如果程式碼沒有任何錯誤,會在下方的 “輸出視窗” 中看到編譯成功的提示: 編譯

C語言程式設計IOS軟體開發張明生

通過Core Library的文件,我們知道建立顏色有這麼幾個方法: CGColorCreate CGColorCreateCopy CGColorCreateGenericGray CGColorCreateGenericRGB CGColorCreateGeneri

C語言實現找出一個數組中只出現一次的數

題目: 一個數組中只有兩個數字是出現一次,其他所有數字都出現了兩次,找出這兩個數字,程式設計實現。 思路: 最簡單直觀的方法,我們用兩個for迴圈,外迴圈用i,內迴圈用j表示,陣列長度用len表示,外迴圈執行一次,內迴圈執行len-1次,逐一比較,如果相等

C語言的int, float,double相互轉化 (從本質上理解可能的問題)

從學了C語言之後,一直習慣於C/C++任意的強制轉化,但是C語言的強制轉化卻總是帶來意想不到的後果,在這裡,我將從int,float,double的本質上講解這些可能出現的問題以及解決辦法,在下面你將看到: OK,現在好戲開始。