История изменений
Исправление 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 Мгц.
Простые оптимизации не влияют на скорость.