5 / 5 / 1
Регистрация: 30.07.2011
Сообщений: 257
|
|
1 | |
Проверка числа на чётность29.08.2011, 20:34. Показов 15664. Ответов 13
Метки нет (Все метки)
0
|
29.08.2011, 20:34 | |
Ответы с готовыми решениями:
13
Возведение числа в степень и проверка числа на четность Проверка числа на чётность/нечётность Проверка введенного числа на чётность Проверка числа типа double на чётность/нечётность |
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
29.08.2011, 20:37 | 2 |
На подавляющем числе всевозможных компиляторов — одинаково. В клинических случаях второй быстрее.
1
|
5 / 5 / 1
Регистрация: 30.07.2011
Сообщений: 257
|
|
29.08.2011, 20:39 [ТС] | 3 |
То есть если есть огромный поток чисел, то лучше второй?
0
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
29.08.2011, 20:42 | 4 |
Ну, если найдешь компилятор, который генерирует здесь разный код, то наверное.
0
|
Maniac
|
||||||||||||||||
29.08.2011, 20:45 | 5 | |||||||||||||||
Сообщение было отмечено как решение
Решение
AvengerAlive, А ты как думаешь?
3
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
29.08.2011, 20:49 | 7 |
ISergey, сравнение не совсем честное, так как результаты этих функций могут различаться, тогда как логическое отрицание даёт одинаковый результат.
0
|
Maniac
|
|||||||||||
29.08.2011, 21:01 | 8 | ||||||||||
В любом случаи второй вариант быстрее.
Для такого кода
0
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
29.08.2011, 21:05 | 9 |
ISergey, неужто микрософт?
кстати, а оптимизация была включена?
0
|
Maniac
|
|||||||||||
29.08.2011, 21:12 | 10 | ||||||||||
Угу
Да. Я ведь спецом добавил int x; std::cin >> x; int a = f_1(x); что бы компилятор не разошелся.. просто когда так написал
0
|
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
|
|
29.08.2011, 21:13 | 11 |
grizlik78, битовые операции априори должны выполняться быстрее простой арифметики, раз уж во всех ЭВМ используется двоичная система счисления, разве нет?
0
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
29.08.2011, 21:23 | 12 |
Ну я же не говорил, что !(a%2) может оказаться быстрее
Просто это тот случай, когда это выражение легко сводится как раз к битовым операциям. Чёрт, я думал, что моё мнение о MSVC не может стать ещё хуже. Я ошибся Ну хоть в случае unsigned он понимает, что (unsigned(a)%2) и (unsigned(a)&1) это одно и то же?
0
|
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
|
|
29.08.2011, 21:55 | 13 |
0
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|||||||||||||||||||||
29.08.2011, 22:06 | 14 | ||||||||||||||||||||
Да уж. Про ожидания.
Я тут тоже немножко поэкспериментировал c GCC. Если оптимизацию не включать, то код получается одинаковым. Отбросив лишнее, получается так:
Однако после включения оптимизации компилятор меня несколько озадачил. Функция f_1:
Добавлено через 3 минуты Да, то была оптимизация по скорости (-O2 или -O3) При оптимизации по размеру (-O1) код функций снова становится одинаковым
2
|
29.08.2011, 22:06 | |
29.08.2011, 22:06 | |
Помогаю со студенческими работами здесь
14
Проверка на чётность проверка на четность и массивы Проверка элементов вектора на четность Итератор и проверка на чётность/нечётность Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |