Счетчик FLOP «x + = y» против «x = x + y» - PullRequest
0 голосов
/ 03 апреля 2019

В таких языках, как C++, есть выражение типа x += y.

Если x уже занято конкретным плавающим числом (например, 3.0), есть ли счетчик FLOPРазница между следующими двумя?

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

Отредактировано

Если говорить конкретно, в таких языках, как Python, действительно есть разница между

  • x + = 1.0
  • x = x + 1.0

, где первое указывает на изменение самой структуры данных, а второе соответствуетпереназначение переменной.(Ссылка: В чем разница между i = i + 1 и i + = 1 в цикле for?

Для подсчета FLOP могут быть заинтересованы следующие две вещи:

  • число + с
  • число * с

, поэтому для новичка вполне естественно C++как я задаюсь вопросом о разнице между счетами FLOP обоих.

Как указывает ответчик, разница может проявиться даже в C++, когда мы используем volatile объекты.

1 Ответ

3 голосов
/ 03 апреля 2019

C и C ++ ничего не говорят о работе процессора. Оба языка определяют поведение выражений, а не то, как они реализованы.

Поведение x = x + 1.0 и x += 1.0 идентично, за исключением того, что любые побочные эффекты оценки x возникают дважды в первом и один раз в последующем. Если x является именем не-volatile объекта, то семантической разницы нет, и любой достойный компилятор должен сгенерировать абсолютно одинаковый код для обоих.

Различия могут появиться, если вы напишите что-то вроде:

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

против

arr[func()] ++;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...