LINUX.ORG.RU

История изменений

Исправление praseodim, (текущая версия) :

Да, странно.

Я бы переделал слегка тест, чтобы оптимизатор при -O3 и др. оптимизациях не выкидывал функцию и цикл.

#include <iostream>
#include <cmath>
#include <time.h>

using namespace std;

bool isPrime(int num)
{
    if (num == 2) {
        return true;
    }
    if (num <= 1 || num % 2 == 0) {
        return false;
    }

    double sqrt_num = sqrt(double(num));
    for (int div = 3; div <= sqrt_num; div +=2)
    {
        if (num % div == 0) {
            return false;
        }
    }
    return true;
}


int main()
{
    int N = 10000000;
    clock_t start, end;
    int result = 0;
    start = clock();
    for (int i = 0; i < N; i++) {
        result+=(int)isPrime(i);
    }
    end = clock();
    cout << (end - start) / ((double) CLOCKS_PER_SEC);
    cout << " sec \n";
    cout<<result<<"\n";
    return 0;
}

Заодно результат чуточку полезнее становится - количество простых чисел выводится.

$ g++ -O0 test-cpp.cpp -o test-cpp-O0 && ./test-cpp-O0
4.34338 sec 
664579

$ g++ -O1 test-cpp.cpp -o test-cpp-O1 && ./test-cpp-O1
4.30605 sec

$ g++ -O2 test-cpp.cpp -o test-cpp-O1 && ./test-cpp-O2
4.30437 sec

g++ -O3 test-cpp.cpp -o test-cpp-O3 && ./test-cpp-O3
4.30343 sec

Проц Ryzen 9 3900X на постоянной частоте 4100 Мгц.

Простые оптимизации не влияют на скорость.

Исходная версия praseodim, :

Да, странно.

Я бы переделал слегка тест, чтобы оптимизатор при -O3 и др. оптимизациях не выкидывал функцию и цикл.

#include <iostream>
#include <cmath>
#include <time.h>

using namespace std;

bool isPrime(int num)
{
    if (num == 2) {
        return true;
    }
    if (num <= 1 || num % 2 == 0) {
        return false;
    }

    double sqrt_num = sqrt(double(num));
    for (int div = 3; div <= sqrt_num; div +=2)
    {
        if (num % div == 0) {
            return false;
        }
    }
    return true;
}


int main()
{
    int N = 10000000;
    clock_t start, end;
    int result = 0;
    start = clock();
    for (int i = 0; i < N; i++) {
        result+=(int)isPrime(i);
    }
    end = clock();
    cout << (end - start) / ((double) CLOCKS_PER_SEC);
    cout << " sec \n";
    cout<<result<<"\n";
    return 0;
}

Заодно результат чуточку полезнее становится - количество простых чисел выводится.

$ g++ -O0 test-cpp.cpp -o test-cpp-O0 && ./test-cpp-O0
4.34338 sec 
664579

$ g++ -O1 test-cpp.cpp -o test-cpp-O1 && ./test-cpp-O1
4.30605 sec

$ g++ -O2 test-cpp.cpp -o test-cpp-O1 && ./test-cpp-O2
4.30437 sec

g++ -O3 test-cpp.cpp -o test-cpp-O3 && ./test-cpp-O3
4.30343 sec

Проц Ryzen 9 3900X на постоянной частоте 4100 Мгц.

Простые оптимизации не влияют на скорость.