找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2332|回復(fù): 10
收起左側(cè)

C語言程序執(zhí)行問題 float型變量寫法

[復(fù)制鏈接]
ID:709761 發(fā)表于 2022-6-18 13:54 | 顯示全部樓層 |閱讀模式
float vcc;
if(vcc==23)
還是寫成
if(vcc==23.0f)
回復(fù)

使用道具 舉報(bào)

ID:121859 發(fā)表于 2022-6-18 15:34 | 顯示全部樓層
不用那么麻煩,編譯器會(huì)強(qiáng)制轉(zhuǎn)換的,所以
if(vcc==23)就可以,實(shí)在想看得像浮點(diǎn)一點(diǎn),這樣也可以
if(vcc==23.0)
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-6-18 21:25 | 顯示全部樓層
兩種寫法都是錯(cuò)誤的。
應(yīng)該這么寫:
if(fabs(vcc-23.0)<Epsilon)
至于Epsilon定義成多大,你看著辦。
回復(fù)

使用道具 舉報(bào)

ID:1040441 發(fā)表于 2022-7-25 11:46 | 顯示全部樓層
if (fabs(vcc- p) < 0.000001)可以根據(jù)差值小于某個(gè)精確度值來判斷是否相等。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-25 18:00 | 顯示全部樓層
IOT-Mr-Li 發(fā)表于 2022-7-25 11:46
if (fabs(vcc- p) < 0.000001)可以根據(jù)差值小于某個(gè)精確度值來判斷是否相等。

這個(gè)“0.000001”取值要根據(jù)數(shù)據(jù)實(shí)際范圍來定,IEEE754單精度mantissa是23位(二進(jìn)制),相當(dāng)于7位(十進(jìn)制)精度。那么這個(gè)“0.000001”對(duì)于0.5~5的數(shù)據(jù)范圍來說就是個(gè)相當(dāng)不錯(cuò)的數(shù)值,但是對(duì)于10來說就完全沒法用了。
回復(fù)

使用道具 舉報(bào)

ID:1040502 發(fā)表于 2022-7-25 18:07 | 顯示全部樓層
都可以的,編譯器會(huì)處理好的。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-26 21:20 | 顯示全部樓層
260189914 發(fā)表于 2022-7-25 18:07
都可以的,編譯器會(huì)處理好的。

都不可以,你對(duì)浮點(diǎn)數(shù)運(yùn)算一無所知。

浮點(diǎn)數(shù)運(yùn)算總是有誤差的,像整數(shù)運(yùn)算那樣絕對(duì)的匹配是不可能的(概率很小,跟中彩票差不多)。
回復(fù)

使用道具 舉報(bào)

ID:419909 發(fā)表于 2022-7-27 10:27 | 顯示全部樓層
如果不是特殊場(chǎng)合。一會(huì)我會(huì)把浮點(diǎn)數(shù)轉(zhuǎn)成整形再做這種邏輯運(yùn)算。要對(duì)比小數(shù)點(diǎn)后面多少位。就將float數(shù)乘以10,100,1000.。。。。就可以了。
回復(fù)

使用道具 舉報(bào)

ID:1040201 發(fā)表于 2022-7-30 16:55 | 顯示全部樓層
浮點(diǎn)運(yùn)算是有誤差的 ,這樣寫 很可能誤判,fabs(),這個(gè)函數(shù)了解一下
回復(fù)

使用道具 舉報(bào)

ID:1041246 發(fā)表于 2022-8-2 21:04 | 顯示全部樓層
23.0或者23.f都可以
回復(fù)

使用道具 舉報(bào)

ID:1041246 發(fā)表于 2022-8-2 21:05 | 顯示全部樓層
不過最好用fabs,浮點(diǎn)等于會(huì)警告
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表