c語言萬能陷阱,c軟體陷阱

本文目錄一覽:

我想問一個簡單的C語言問題,就是關於浮點數的陷阱。

這是因為你累加的步長是0.1,如果你加的是1.0就可以正常退出循環。

為什麼步長是0.1就不行,因為double,float這類浮點數是二進位浮點數。

它的大於一部分的值,是精確的,因為大與一的值是整數,是2^0 2^1 2^2 這樣二的冪累加而得的。

小於一的部分,就不一定了,它們還是由二的冪累加,從2^-1 2^-2 2^-3也就是1/2, 1/4, 1/8這樣累加起來的,這樣對於有些10進位的小數,是無法精確表達的,只能近似表達。

比如0.2=1/5 這個數用2的負數次冥來表示是不行的

(二的負數次冥為1/2, 1/4, 1/8

0.2=1/5 約等於51/256 = 1/256 + 25/128 = 1/256 + 1/128 + 3/16 = 1/256 + 1/128 + 1/16 + 1/8=

0 × (1) + 0 × (1/2) + 0×(1/4) + 1 ×(1/8) + 1× (1/16) + 0 ×(1/32) + 0 ×(1/64) + 1 × (1/128) +1 × (1/256) = 0.00110011 這就是0.2的二進位小數表示。

由此可見,只要小數的值不能化為二的負冥的整數倍(這種情況很多),那麼二進位表示的小數,都只能是近似值。

既然是近似值你累加0.1想得到10.0的精確值自然不可能,判斷i != 10基本都會失敗,除非你累加的是精確的浮點數,比如1.0,或者0.125之類,整數個步長剛好可以達到你的判斷條件—-10的。

所以一般這種判斷,都是用i = 10這樣。

求C語言大神看3道有陷阱的入門編程題?

這是C語言中的「右移運算符」。一般情況下,他是按位操作。

特點:1.雙目運算符,就像+、-、*、/一樣,格式為(數1)(數2)

2.數1是被操作數,如被減數、被除數等;數2是右移位數。

3.優先順序低,結合性:從左向右運算

如:81=?表示將被移數向右移動1位

如何操作?

1.化十進位數為(注意了)對應的二進位數,對應指格式對應

2.通通右移,不足補0

3.化為十進位數

舉例:short int a=8;a=a1;

1.a=0 000 1000

2.右移一位後:a= 0 000 100

3.補0:a=0 000 0100

4.化為十進位數:a=4

舉例:int a=8;a=a1;

1.a=0 000 0000 0000 1000

2.右移一位後:a= 0 000 0000 0000 100

3.補0:a=0 000 0000 0000 0100

4.化為十進位數:a=4

一道有陷阱的C語言問題,請各位大蝦們看看

改成下面的代碼,注意計算sum的地方

#includestdio.h

int main()

{

int n,m,i;

double sum=0.0;

scanf(“%d %d”,n,m);

if(nm||n=0||n1000000||m=0||m1000000)

return 0;

for(i=0;i=m-n;i++)

{

double t = n+i;

sum+=1.0/(t*t);

}

printf(“%.5lf”,sum);

return 0;

}

原來你用的:((n+i)*(n+i))會溢出,65536*65536 = 4294967296超過int能表示的最大值

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/235815.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 11:56
下一篇 2024-12-12 11:57

相關推薦

  • Python腳本控制其他軟體

    Python作為一種簡單易學、功能強大的腳本語言,具有廣泛的應用領域,在自動化測試、Web開發、數據挖掘等領域都得到了廣泛的應用。其中,Python腳本控制其他軟體也是Python…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 量化交易軟體哪個好?

    量化交易軟體是為量化交易而設計的工具,能夠用程序化方法對市場數據進行分析和交易決策。那麼,哪個量化交易軟體最好呢?下面從幾個方面進行詳細闡述。 一、交易功能 交易功能是量化交易軟體…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python計算機二級刷題軟體推薦

    Python作為編程語言的代表,已經在計算機學習和開發領域佔據了重要角色。Python計算機二級是國家信息技術應用能力證書的一種,是計算機應用能力的重要評估標準。對於想要獲取Pyt…

    編程 2025-04-29
  • 電腦如何下載ps軟體

    如果您想在電腦上使用Photoshop,那麼您需要下載安裝該軟體。下面是詳細的步驟說明: 一、選擇下載網站 目前市面上有很多下載網站都可以下載到Photoshop軟體,比如Adob…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28

發表回復

登錄後才能評論