Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / нечетные числа / 25 сообщений из 44, страница 1 из 2
10.07.2006, 16:48
    #33843042
AngelSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
подскажите, есть в с++ встроенная функция, определяющая четное число или нечетное? (что-то вроде odd в Паскале)
...
Рейтинг: 0 / 0
10.07.2006, 16:57
    #33843081
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Вряд ли существует. напиши макрос, например:

Код: plaintext
1.
#define odd(x) (x% 2 )
...
Рейтинг: 0 / 0
10.07.2006, 17:04
    #33843115
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
AngelSQLподскажите, есть в с++ встроенная функция
С++ такой фигнёй не занимается :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
10.07.2006, 17:06
    #33843120
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
AngelSQLподскажите, есть в с++ встроенная функция, определяющая четное число или нечетное? (что-то вроде odd в Паскале)

чёт от нечета отличается только младшим битиком ... Вы его можете отдетектить маленькой кучкой своих подходов...

с уважением
(круглый)
...
Рейтинг: 0 / 0
10.07.2006, 17:15
    #33843158
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
kolobok0
чёт от нечета отличается только младшим битиком ... Вы его можете отдетектить маленькой кучкой своих подходов...


Точно. ступил.

Код: plaintext
1.
#define odd(x) (x& 1 )

Так будет лучше.
...
Рейтинг: 0 / 0
10.07.2006, 17:25
    #33843190
ZeusTheTrueGod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Ни один нормальный программист не будет юзать такие макросы, потому что из-за этого появятся труднонаходимые ошибки.
Поэтому юзайте
Код: plaintext
bool odd(int x) {return x% 2 ;}
...
Рейтинг: 0 / 0
10.07.2006, 17:37
    #33843221
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
ZeusTheTrueGodНи один нормальный программист не будет юзать такие макросы, потому что из-за этого появятся труднонаходимые ошибки.
Поэтому юзайте
Код: plaintext
bool odd(int x) {return x% 2 ;}


в общем Вы правы...Есть только маленьчкое замечание....

остаток от деления - будет найден скорее всего (не проверял) методом сдвига в право на одын (оптимизатор сработает), сохранением результата в другой переменной и далее анализ...В Вашем случае, даже будет расход на колл и ретурн (у Вас же не инлайн). А в некоторых случаях Вам и инлайн не поможет (внешняя в дэлеле к примеру)...

проверка же младшего бита будет преобразована к азмовской команде test (для x86 имеется ввиду). И далее принятие решения...Что уже на одну команду меньше чем в Вашем примере (хотя возможно отдельная функция испоганит всё малину)... А если ышо убрать колл - ретурн и того прелесть...


с уважением
(круглый)
ЗЫ
Есть способ ышо циклический сдвиг и анализ на отрицательное число... Мона сдвинуть в перенос и обработать переход по переносу...Мона наложить маску и обработать переход по нулю... Да там мона хфантазировать достаточно долго :)
...
Рейтинг: 0 / 0
10.07.2006, 17:44
    #33843244
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
ZeusTheTrueGodНи один нормальный программист не будет юзать такие макросы, потому что из-за этого появятся труднонаходимые ошибки.
Поэтому юзайте
Код: plaintext
bool odd(int x) {return x% 2 ;}


Да, вы что! Аргументы?
...
Рейтинг: 0 / 0
10.07.2006, 17:48
    #33843257
Sandro_K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
макрос
Код: plaintext
1.
#define odd(x) (x% 2 )
может вызвать ошибку если например написать:
Код: plaintext
1.
std::cout << odd( 3 + 1 ) <<"\n"
Поэтому если писать макрос, то x надо обязательно взять в скобки:
Код: plaintext
1.
#define odd(x) ((x)% 2 )

quot ZeusTheTrueGod]Ни один нормальный программист не будет юзать такие макросы, потому что из-за этого появятся труднонаходимые ошибки.
Поэтому юзайте
Код: plaintext
bool odd(int x) {return x% 2 ;}
[/quot]

Функции действительно безопаснее. На мой взгляд самым лучшим решением будет шаблонная функция:
Код: plaintext
1.
2.
template<typename T>
bool odd(T x) {return x% 2 ;}
...
Рейтинг: 0 / 0
10.07.2006, 17:57
    #33843286
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Sandro_K
Поэтому если писать макрос, то x надо обязательно взять в скобки:

Согласен.

Sandro_K
Функции действительно безопаснее. На мой взгляд самым лучшим решением будет шаблонная функция:
Код: plaintext
1.
2.
template<typename T>
bool odd(T x) {return x% 2 ;}


Зависит от размера и разношерстности области пременимости.
...
Рейтинг: 0 / 0
11.07.2006, 13:45
    #33844914
ZeusTheTrueGod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Зато такой шаблон нельзя вставить в библиотеку
...
Рейтинг: 0 / 0
11.07.2006, 14:42
    #33845171
Sandro_K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
ZeusTheTrueGodЗато такой шаблон нельзя вставить в библиотеку
Да это конечно очень большая проблема. :)

Шаблон надо будет вставить в заголовочный файл, который будет распространяться вместе с библиотекой.
Вот обновленная версия, она должна быть не менее эффективна чем макрос:
Код: plaintext
1.
2.
template<typename T>
inline bool odd(T x) {return x& 1 ;}

Хотя я в своих программах скорее всего не буду писать ни макросов, ни функций, ни шаблонов, напишу просто x%2 или x&1 :)
...
Рейтинг: 0 / 0
11.07.2006, 14:51
    #33845207
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Sandro_KХотя я в своих программах скорее всего не буду писать ни макросов, ни функций, ни шаблонов, напишу просто x%2 или x&1 :)

Я тоже не буду, есстественно. Человек просил... :)
...
Рейтинг: 0 / 0
11.07.2006, 15:36
    #33845387
freebeer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Sandro_K
Вот обновленная версия, она должна быть не менее эффективна чем макрос:
Код: plaintext
1.
2.
template<typename T>
inline bool odd(T x) {return x& 1 ;}

Вопрос в студию: что данная функция вернет для типов double/float? :)
...
Рейтинг: 0 / 0
11.07.2006, 15:45
    #33845419
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
то, что она вернёт для дабла - фигня по сравнению с тем, что она вернёт для комплексного числа.
...
Рейтинг: 0 / 0
11.07.2006, 16:09
    #33845527
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
ругнется при компиляции, поскольку неявное преобразование будет с потерей информации
...
Рейтинг: 0 / 0
11.07.2006, 16:15
    #33845554
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
freebeer
Вопрос в студию: что данная функция вернет для типов double/float? :)

Числа с плавающей точкой не бывают четными или не четными
...
Рейтинг: 0 / 0
11.07.2006, 16:17
    #33845562
freebeer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Gluk (Kazan)ругнется при компиляции, поскольку неявное преобразование будет с потерей информации
Точно - error C2296: '&' : illegal, left operand has type 'double'
...
Рейтинг: 0 / 0
11.07.2006, 16:25
    #33845600
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Sorry сплоховал, она даже не пыталась его преобразовывать :)
...
Рейтинг: 0 / 0
11.07.2006, 16:46
    #33845700
freebeer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Akh
Числа с плавающей точкой не бывают четными или не четными
4.0 -оно какое ?
...
Рейтинг: 0 / 0
11.07.2006, 16:48
    #33845704
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
freebeer4.0 -оно какое ?
судя по всему, зависит от младшего бита
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
11.07.2006, 17:02
    #33845762
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
freebeer Akh
Числа с плавающей точкой не бывают четными или не четными
4.0 -оно какое ?

не целое. Приблизительно 4 с точностью до первого знака после запятой. Ты это хотел услышать?
...
Рейтинг: 0 / 0
11.07.2006, 17:05
    #33845776
Sandro_K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
У меня при попытки компиляции данного шаблона для типов double, float, и complex компилятор выдает ошибки. На мой взгляд это правильно.
Если число дробное то например 4.2 2.5 то нельзя сказать четное оно или нет
Если double содержит целое число, то пусть программист, при определении четное оно или нет, явно напишет преобразование типа.
Что касается комплексных чисел, то я вообще сильно сомневаюсь что они быть четными.
...
Рейтинг: 0 / 0
11.07.2006, 17:11
    #33845804
freebeer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
Akh[quot freebeer]
не целое. Приблизительно 4 с точностью до первого знака после запятой. Ты это хотел услышать?

Что не целое, я догадался :).. Определение четности, плз... И как оно соотносится с типом числа...
...
Рейтинг: 0 / 0
11.07.2006, 17:14
    #33845819
Sandro_K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нечетные числа
freebeer Akh[quot freebeer]
не целое. Приблизительно 4 с точностью до первого знака после запятой. Ты это хотел услышать?

Что не целое, я догадался :).. Определение четности, плз... И как оно соотносится с типом числа...

Чётность в теории чисел — характеристика целого числа, определяющая его способность делиться нацело на два. Если целое число делится на два, оно называется чётным (примеры: 2, 28, —8, 40), если нет — нечётным (примеры: 1,3, 75, —19). Нуль считается чётным числом.

Чётное число — целое число, которое делится на 2 без остатка: …−4,−2,0,2,4,6,8…

Нечётное число — целое число, которое не делится на 2 без остатка: …−3,−1,1,3,5,7,9…

Иными словами чётное и нечётное — собственные названия классов вычетов [0] и [1] по модулю 2.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / нечетные числа / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]