Уравнения на с++ и ассемблер

В соответствии с вариантом напишите программу на языке С++ и на языке ассемблера (с помощ ью ассемблерных вставок). Сравните полученный результат.
image

В чем проблема? Что пробовали? Что получилось, что не получилось?

И с чем небходимо

С расчетами вручную, или подразумевается сравнение быстродействия с asm вставками и без них?

Да просто проверить наверно, что оба считают одинаково, для повышения вероятности, что оба считают правильно )
Видимо идея в том, что на асм проще допустить ошибку.

Наверное нет. Если должны быть вставки асма, то здесь логично какое-то сравнение с кодом без вставок. Так понимаю для осознания отличий в выполнении кода машиной…

Ну это тогда дизасм смотреть надо, сравнивать со своим асм.

А по скорости разницы вполне может и не быть + это целая наука как её правильно измерять.

Зачем так сложно?
Можно сравнить по времени выполнения кода в миллисекундах.
P. S.
Но этому обучают, как правило, разработчиков встраиваемых систем реального времени. Где каждый такт ядра контроллера должен быть учтен.

Ну на это много чего влияет, кэши, другие процессы, ОС и т.д.
Надо изучать, продумывать методологию.
Как минимум выполнить эту операцию много раз (с наверно разными числами) в цикле, и несколько раз прогнать программу, убедиться, что нет аномалий (каждый раз похожее время).

Так что на таком простом примере проще дизасм глянуть, может умный компилятор еще и лучше студента сгенерировал. :kolobokbatya:


Но тут вряд ли об этом, сравнить же просят

где под “результатом” скорее всего имеют в виду результат вычислений.
Иначе б уточнили более подробно )

Так это уже в сторону тестирования ПО загнул.
Посмотрим что ТС скажет, что именно нужно.

Тестируют обычно корректность работы (ну или приемлимость производительности, типа что программа не зависает на минуту при каждом действии).

Сравнение скорости разных реализаций это бенчмаркинг.

Цикл нужен потому что одно такое вычисление наверно будет 0 времени выдавать в винде и подобных ОС.
Ну а много раз и с разными числами, чтобы не попасть на какой-нибудь кэш и прочие оптимизации. Вдруг например вырежутся все лишние вычисления компилятором и т.д.

Если речь о тестировании, то добавлю еще тест на не корректные действия пользователя.

Здесь смотря как зациклить, можно для теста нагрузить параметром для количества вычислений.
Но все же предполагаю суть темы не в этом. Повторюсь, задание похоже на сравнение:
код со вставками и без них, сравнение количества затраченого процессорного времени на выполнение кода.

Ну так выше я ж и говорю про это, и что это время не так просто вычислить.

VS 2019, x64 релиз сборка, выдает в основном 0, иногда 1.

#include <iostream>
#include <cstdint>
#include <windows.h>

static inline int64_t getTicks() {
    LARGE_INTEGER ticks;
    QueryPerformanceCounter(&ticks);
    return ticks.QuadPart;
}

int main() {
    int x, a, y;

    std::cout << "Enter x and a: ";
    std::cin >> x >> a;

    int64_t startTime = getTicks();

    if (x > 0) {
        y = a * x;
    }
    else  {
        y = a + x;
    }

    int64_t endTime = getTicks();

    std::cout << endTime - startTime;
}

Так и я ведь говорю, задать нужный параметр вычислений для теста.
В данном случае переменные. Чем выше значение тем больше будет произведено итераций. И значение результата будет достаточным для принятия решения относительно быстродействия. Например вести x равным 100000

:thinking:

x из кода выше? Так и откуда тут итерации возьмутся?

image

Верно, не возьмутся. Однократно выполнится.
Что-то не о том я.