簡體   English   中英

"x += y" 與 "x = x + y" 的 FLOP 計數

[英]FLOP count of "x += y" vs. "x = x + y"

在像C++這樣的C++ ,有一個像x += y這樣的表達式。

如果x已經被一個特定的浮點數(例如3.0 )占用,那么下面兩個之間是否有任何 FLOP 計數差異?

    1. x += 1.0
    1. x = x + 1.0

已編輯

具體來說,在Python等語言中,確實是有區別的

  • x+= 1.0
  • x = x+1.0

其中第一個表示數據結構本身的修改,第二個對應於變量的重新分配。 (參考: for 循環中 i=i+1 和 i+=1 有什么區別?

對於FLOP計數,人們可能對以下兩件事感興趣:

  • +的數量
  • *的數量

所以對於C++的新手來說,想知道兩者的 FLOP 計數之間的差異可能是很自然的。

正如回答者指出的那樣,當我們使用volatile對象時,即使在C++也會出現差異。

C 和 C++ 沒有提及 CPU 操作。 兩種語言都指定了表達式的行為,而不是它們的實現方式。

x = x + 1.0x += 1.0是相同的,除了計算x任何副作用在前者中發生兩次,在后者中發生一次。 如果x是非易失volatile對象的名稱,則沒有語義差異,任何體面的編譯器都應該為兩者生成完全相同的代碼。

如果您編寫以下內容,則可能會出現差異:

arr[func()] = arr[func()] + 1.0;

對比

arr[func()] ++;

暫無
暫無

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

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