Size: a a a

2020 August 02

AF

Aidar Fattakhov in supapro.cxx
без volatile
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Каждый раз, а не последнее значение.
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Aidar Fattakhov
именно по этому я предложил сумму
Тот же результат с разницей в пределах погрешности :)
источник

AF

Aidar Fattakhov in supapro.cxx
ну значит ваш код дает такой вот результат
источник

AF

Aidar Fattakhov in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Я понимаю, что код вокруг влияет.
Но есть код, который мало от чего зависит.
Да и смотря что искать в этом коде.
нормальный компилятор при оптимизациях учитывает например размер кэша инструкций
источник

AF

Aidar Fattakhov in supapro.cxx
тоесть абсолютно люой код зависит от своего окружения
источник

CD

Constantine Drozdov in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Я могу вставить во второй
    _asm {
     nop
   }
И ничего не изменится в его скорости.
Это на практике, а не в теории.
Вы же понимаете, что на практике результаты будут зависеть от того, что написано на 100 строк ниже в этом коде, да?
источник

CD

Constantine Drozdov in supapro.cxx
Оптимизатор весьма нежная штука
источник
2020 August 03

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Много от чего зависит. В том числе и от реализации в конкретном компиляторе (в Clang будет немного другой результат, в GCC — третий), где-то ещё и от ключей компилятора. И т.д.

Но не это важно в данном случае.
Суть эксперимента — посмотреть, насколько sse-реализация синуса может быть быстрее  fpu-шной. К примеру, в Delphi разница порядка 30%, а в плюсах уже до 2.5 раз доходит.

Что касается, 100 строк ниже, то к примеру, в x86 версии VC++ sin вызывает библиотечную (dll) функцию _libm_sse2_sin_precise, поэтому ниже расположенный код вряд ли как-то повлияет на результат. Разве что мы будем вызывать sin от константного значения (и то не факт, что компилер с этим справится в данном конкретном случае).
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Так что, всегда можно найти вариант, работающий как надо, хотя казалось бы, гарантии никакой нет, "всё сложно и запутанно" и т.д. :)
Да и элементарно есть ситуации, когда сделать универсальный вариант задачи не стоит :)
источник

VK

Vladimir Kornev in supapro.cxx
Вопрос по чистому С. Хочу вот такой массив double x[3][4] = { ....}; Передавать в функцию вида void foo(double **x); Как это сделать?
источник

AZ

Alexander Zaitsev in supapro.cxx
Vladimir Kornev
Вопрос по чистому С. Хочу вот такой массив double x[3][4] = { ....}; Передавать в функцию вида void foo(double **x); Как это сделать?
передай как указатель и размер каждой размерности
источник

VK

Vladimir Kornev in supapro.cxx
Alexander Zaitsev
передай как указатель и размер каждой размерности
это как? foo(&x[3])? foo(*x[3])?
источник

AZ

Alexander Zaitsev in supapro.cxx
void foo(double** x, int n, int m)
источник

AF

Aidar Fattakhov in supapro.cxx
Vladimir Kornev
Вопрос по чистому С. Хочу вот такой массив double x[3][4] = { ....}; Передавать в функцию вида void foo(double **x); Как это сделать?
Никак
источник

AF

Aidar Fattakhov in supapro.cxx
Это неприводимые друг к другу типы
источник

AF

Aidar Fattakhov in supapro.cxx
Строки имеют бинарно разный размер и фромат
источник

VK

Vladimir Kornev in supapro.cxx
^^ ну и кто из вас двоих врёт? :)
источник

AF

Aidar Fattakhov in supapro.cxx
Лучшее что ты получишь из первого - указатель на массив длины 4 дабла
источник

G

G in supapro.cxx
Vladimir Kornev
Вопрос по чистому С. Хочу вот такой массив double x[3][4] = { ....}; Передавать в функцию вида void foo(double **x); Как это сделать?
void foo(double *x) и там изнутри орудуй, только не поломай кучу.
источник