Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
andreymxнапомните, есть ли алгоритм вычисления максимума из двух чисел без if вычислить разность двух чисел и поверить знак результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 09:51 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Вася Уткин, Походу нашелся победитель с правильным решением :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 12:54 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВася Уткин, Походу нашелся победитель с правильным решением :) Я только не на 100% уверен, всегда ли по стандарту в C/C++ выражение a<b обязано быть равно 0 или 1, или может принимать и другие значения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 13:32 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
White OwlМожет вас смущает то что "ассемблером" называют и программу которая переводит из мнемоники в машинные кода? Но эта программа по существу и есть компилятор. Нет, эта программа по существу не есть компилятор. Она есть по существу транслятор. Надеюсь, разницу объяснять не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 13:39 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Вася УткинЯ только не на 100% уверен, всегда ли по стандарту в C/C++ выражение a<b обязано быть равно 0 или 1, или может принимать и другие значения? Да, обязано. "a<b" имеет тип bool в С++ и _Bool в С bool в С++ это нечисловой тип, который при приведении к числовому (в данном случае для индексации массива) принимает значения 0 или 1. _Bool в С - это числовой тип который принимает значения 0 или 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 13:53 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВася УткинЯ только не на 100% уверен, всегда ли по стандарту в C/C++ выражение a<b обязано быть равно 0 или 1, или может принимать и другие значения? Да, обязано. "a<b" имеет тип bool в С++ и _Bool в С bool в С++ это нечисловой тип, который при приведении к числовому (в данном случае для индексации массива) принимает значения 0 или 1. _Bool в С - это числовой тип который принимает значения 0 или 1. Значит я угадал :) Но обращение к кэшу L1 все равно будет дольше, чем переходы jg/jl, так что с практической точки зрения это мало имеет смысла. В обоих случаях в конвейере не получится внеочередное выполнение команд завязанных на результат такого сравнения - только в случае с массивом потеряем ещё несколько тактов на обмен с L1. А других вариантов решения не знаете случайно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 14:15 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Вася Уткин, ну, например, из той же серии: a + (b-a) and (ord(a>b) - 1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 14:49 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovВася Уткин, ну, например, из той же серии: a + (b-a) and (ord(a>b) - 1) А что такое ord? :) Получается что-то типа: http://ideone.com/1zCiYa Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Причем, 1-й раз в compile-time отработает, даже в C++11(не 14), а второй раз в run-time без jump-ов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 17:59 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Вася Уткин, Сорри, приз переходит к Aleksandr Sharahov :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 00:38 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВася Уткин, Походу нашелся победитель с правильным решением :) нет, там есть сравнение, причём явное. Anatoly Moskovsky Сорри, приз переходит к Aleksandr Sharahov :) а знак больше это не if разве ? Правильно решение было у Дмитрия (Dima_T) и у меня. Только в этих двух решения не содержался явный if (и знаки больше меньше etc) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 01:48 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа знак больше это не if разве ? Нет конечно. Там же нет ветвления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 06:49 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryнет, там есть сравнение, причём явное. Правильно решение было у Дмитрия (Dima_T) и у меня. Только в этих двух решения не содержался явный if (и знаки больше меньше etc) Поясню. Сравнение - это просто вычитание, а вовсе не if где требуется проверка на 0 и условный переход. Таким образом в коде который предложил Aleksandr Sharahov есть операции "-", "+", "&". А в вашем коде есть в разных его вариантах были операция * и даже % которые медленнее на порядки. Если сравнивать алгоритмы по скорости выполнения (а других причин для такого идиотского условия задачи нет) то самый быстрый будет код от Aleksandr Sharahov. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 07:07 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SSmiksoftПридумать-то можно, но зачем? Псевдокод: Код: sql 1. 2. 3. 4. 5. 6. sign можно реализовать без if, например, сдвигами и бинарными операциями. тогда уже Код: plaintext 1. так читабельней. Чем тогда плох этот пример(приводил его намного раньше) ? Выше псевдокод и использованием нотации Айверсона, присутствующей в Си/С++ по умолчанию, вот код на С++. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 07:16 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, не знал что операция сравнения это разность. Но тем не менее, позже был показан вариант включающий только & >> и +, без умножения и % ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 07:24 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧем тогда плох этот пример Я не говорю что он плох. Я говорю что есть лучше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 07:47 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, кстати, в этом примере, умножение смело можно заменить на побитовое умножение & Код: plaintext 1. 2. мне эти ord непонятны, поверю вам, лучше так лучше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 07:58 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryмне эти ord непонятны, поверю вам, лучше так лучше :) Не надо мне верить. Я же не проверял экспериментом :) А ord это просто приведение типа к числу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 08:41 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Развели тут длинное обсуждение, а при этом современный компилятор сгенерирует код для такого "if(a) b=c" без условных переходов, используя conditional move ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 09:12 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly Moskovsky, кстати, в этом примере, умножение смело можно заменить на побитовое умножение & Код: plaintext 1. 2. мне эти ord непонятны, поверю вам, лучше так лучше :) Это из Паскалей . ИМХО. Автор некисло вбросил навоза на реактивную турбину. Он в сабже не указал язык программирования. Перечислил какой-то сомнительный список операций (или функций) или макросов типа and or xor. Вот мы и крутимся то в ассемблер то в С++ то в математику. О базисах и минимизации я уже писал. Так что добавить нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2014, 12:25 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Не думаю, что автору было нужно узнать максимум любых двух чисел. Наверное, было достаточно и для положительных. Потому def f(a, b): c = - ((a % b - a) // a) return c * a + (1 - c) * b Для произвольных чисел алгоритм не подойдет, но думаю двигаться нужно в этом направлении, так как такие задачки часто задают школьникам на "подумать" прежде, чем рассказать о if и т.п. К примеру http://informatics.mccme.ru/mod/statements/view3.php?id=2296&chapterid=2958 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 22:16 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВася Уткин, Сорри, приз переходит к Aleksandr Sharahov :) Всё-таки нет. Правильных решений на этих 4х страницах практически нет(в том числе и мое первое рассуждение содержит ошибку) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 14:22 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
на Python 3.4.2 Код: python 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2018, 01:58 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39288305&tid=1340042]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
169ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 268ms |

| 0 / 0 |
