簡體   English   中英

將整數除法存儲在浮點值C ++中

[英]Store division of integers in float value C++

我只是想問一下,如果我不像這樣將浮點型變量存儲在浮點型中時,不對浮點型整數進行類型轉換,會發生數字明智的變化:

int32 IntVar1 = 100
int32 IntVar2 = 200
float FloatVar = IntVar1/IntVar2;

目前我正在這樣做:

int32 IntVar1 = 100
int32 IntVar2 = 200
float FloatVar = float(IntVar1)/float(IntVar2);

但是在我擁有的代碼數量上,這看起來確實很困難。 我曾考慮過將int變量更改為float,但是我想那會影響性能。 而且由於整數值不應保留任何小數,因此感覺像是完全浪費。

所以我想知道,選項1是否可以正常工作? 還是我必須進行類型轉換或將變量更改為float? (幾乎所有類型轉換都使代碼不可讀)

我不會太擔心過早的優化。 如果將您的值表示為float類型更有意義,請繼續使用它。 如果您的程序沒有按照需要的速度運行,並且已經對其進行了概要分析,並且知道浮點運算是問題所在,那么就開始考慮如何加快速度。

我希望所有類型的代碼都具有可讀性,這似乎也是您的直覺。

另外,由於此問題被標記為C ++,所以我認為(不幸的是)這樣做是慣用的:

float FloatVar = static_cast<float>(IntVar1)/IntVar2

看一下功能的魔力:

float div(int x, int y)
{
    return float(x) / float(y);
}

現在你可以說:

int32 IntVar1 = 100
int32 IntVar2 = 200
float FloatVar = div(IntVar1, IntVar2);

您需要至少一個這些操作數為浮點數,否則除法將被截斷。 我通常會轉換第一個操作數:

float FloatVar = (float)IntVar1/IntVar2;

從優雅的角度來看,還算不錯。

根據ISO / IEC標准-N3797-第5.6節

對於整數操作數,/運算符得出代數商, 舍棄任何小數部分 ; 如果商a / b在結果類型中可表示,則(a / b)* b + a%b等於a; 否則,a / b和a%b的行為均未定義

舍棄小數部分被稱為向零截斷

難怪小數部分是否被丟棄

22/7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM