Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
напомните, есть ли алгоритм вычисления максимума из двух чисел без if ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 20:07 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
+ - * / and or xor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 20:11 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Придумать-то можно, но зачем? Псевдокод: Код: sql 1. 2. 3. 4. 5. 6. sign можно реализовать без if, например, сдвигами и бинарными операциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 20:39 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Поправка: Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 20:40 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. 6. Ну а если Си не любишь, то можно и на SQL сделать. Код: sql 1. Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 20:41 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
White Owl Код: sql 1. Да, это не if, там и буковок-то таких нету! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 20:43 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
andreymxнапомните, есть ли алгоритм вычисления максимума из двух чисел без if А на брейнфаке генератор случайных чисел слабо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 21:59 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
MaytonsFuckenMaximumFunction.lisp Код: python 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 22:26 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
(a + b + abs(a-b)) / 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 00:46 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
На самом деле все предложенные алгоритмы содержат неявный if. Если вы видите знак больше или меньше, то мы уже говорим о каком-либо условии. Казалось бы вариант предложенный Яростным мечом подходит, но и это не так. Ибо вычисление модуля подразумевает условие, кроме того, модуль не был в числе допустимых операций andreymx + - * / and or xor потому, ответа на поставленный вопрос никто пока не дал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 02:51 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Можно было сделать так: Код: plaintext 1. если а больше b то t>=1, в противном случае 0. Нужно установить t в 1, в том случае, если t>1. Это можно сделать следующим образом Код: plaintext 1. если t было равно 0, то получим 2, если больше нуля, то получим число вида , это число не является целым, потому следующей операцией будет следующая Код: plaintext 1. Если t было равно 2, то мы получим 0, в противном случае, мы получим остаток 1. Таким образом, если a>b, то t=1, в противном случае, 0. Выражение вида Код: plaintext 1. даст вам то, что требуется. PS скорее всего, в реализации операции % тем или иным образом присутствует условие, но в данном случае, оно менее явное чем в остальных случаях. И тут я так-же не использовал только те операции что вы предлагали. Код не тестировал, проверьте сами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 03:14 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
miksoftПридумать-то можно, но зачем? Псевдокод: Код: sql 1. 2. 3. 4. 5. 6. sign можно реализовать без if, например, сдвигами и бинарными операциями. тогда уже Код: plaintext 1. так читабельней. Может и можно реализовать, не помню. Надеюсь автор доведёт дело до конца, и напомнит как это сделать. Хотя тут и думать не нужно, это элементарно, вот так: Код: plaintext 1. 2. 3. 4. данная функция вернёт 1 если число отрицательно и 0 в противном случае, таким образом, получим следующий результирующий код Код: plaintext 1. 2. В общем мысль и идея понятны, тестируйте, не проверял этот код. PS но опять таки, в данном коде присутствуют лишние операции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 03:26 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНа самом деле все предложенные алгоритмы содержат неявный if. Если вы видите знак больше или меньше, то мы уже говорим о каком-либо условии. Казалось бы вариант предложенный Яростным мечом подходит, но и это не так. Ибо вычисление модуля подразумевает условие, кроме того, модуль не был в числе допустимых операций abs() можно реализовать так sqrt(x*x) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:11 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Dima T, покажите как вы реализуете корень :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:13 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Второй вариант получить множитель 1 для положительного, -1 для отрицательного, т.е. sign() в двоичном представлении 00000001 и 11111111 соответственно, старший бит это знак для типов со знаком. далее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:39 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. явный if ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:48 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryDima T, покажите как вы реализуете корень :) Корень можно вычислить как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:49 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. явный if а так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:50 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
andreymxнапомните, есть ли алгоритм вычисления максимума из двух чисел без if А вообще, по идее на scheme просто Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:54 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoSashaMercuryDima T, покажите как вы реализуете корень :) Корень можно вычислить как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. вы используете тернарный оператор, значит используете if ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:55 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Dima T Код: plaintext 1. 2. 3. Кстати можно обойтись 8-ю строчками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:55 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryвы используете тернарный оператор, значит используете if Да там и if есть самый настоящий. Но по сабжу я уже ответил Программа:(max 5 3) Результат: 5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:56 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Dima TDima T Код: plaintext 1. 2. 3. Кстати можно обойтись 8-ю строчками а чем это лучше предложенного кода ранее SS Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 07:58 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoSashaMercuryвы используете тернарный оператор, значит используете if Да там и if есть самый настоящий. Но по сабжу я уже ответил Программа:(max 5 3) Результат: 5 а вы посмотрите как в Scheme реализована эта функция :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:02 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа чем это лучше предложенного кода ранее SS Код: plaintext 1. 2. 3. 4. Тем что я его не заметил выше :) Только правильно так Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:05 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryXDiaBLoпропущено... Да там и if есть самый настоящий. Но по сабжу я уже ответил Программа:(max 5 3) Результат: 5 а вы посмотрите как в Scheme реализована эта функция :) Хмм, исходники компилятора чтоль поискать? Там это похоже ключевое слово, даже не из библиотек, а основы языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:09 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryа чем это лучше предложенного кода ранее пропущено... Тем что я его не заметил выше :) Только правильно так Код: sql 1. 2. 3. 4. почему так ? ведь у меня после сдвига в младшем разряде будет либо 1, либо 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:20 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. Ну и битовые сдвиги не перечислены в разрешенных операциях andreymx+ - * / and or xor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:22 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercury Код: plaintext 1. Ну и битовые сдвиги не перечислены в разрешенных операциях andreymx+ - * / and or xor А это же не циклический сдвиг? Деление нацело сойдёт тогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:26 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryпочему так ? ведь у меня после сдвига в младшем разряде будет либо 1, либо 0 обычно принято что sign() возвращает +1 для положительных, -1 для отрицательных и 0 для 0. В данном случае 0 не важен, т.к. нам в итоге надо получить модуль числа, т.е. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:26 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoDima Tпропущено... Ну и битовые сдвиги не перечислены в разрешенных операциях пропущено... А это же не циклический сдвиг? Деление нацело сойдёт тогда. А мля, 31 а не 32... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:26 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoXDiaBLoпропущено... А это же не циклический сдвиг? Деление нацело сойдёт тогда. А мля, 31 а не 32...Впрочем 2 в 31 степени же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:26 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoА это же не циклический сдвиг? Деление нацело сойдёт тогда. Это оказывается сдвиг с учетом знака http://msdn.microsoft.com/ru-ru/library/vstudio/k2ay192e(v=vs.100).aspx Для заполнения позиций слева используется бит знака значения Я не знал, если честно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:35 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Dima T, тогда надо будет результат побитово умножить на 1. Но если уж уходить от побитового сдвига, то нужно использовать ваш вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:40 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Dima TXDiaBLoА это же не циклический сдвиг? Деление нацело сойдёт тогда. Это оказывается сдвиг с учетом знака http://msdn.microsoft.com/ru-ru/library/vstudio/k2ay192e(v=vs.100).aspx Для заполнения позиций слева используется бит знака значения Я не знал, если честно. Ясно, деление нацело не сойдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:52 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
SashaMercuryDima T, тогда надо будет результат побитово умножить на 1. не поможет т.к. 0&1 = 0. Твой сдвиг дает либо 0000 либо 1111, т.е. для положительных надо дополнительно 0000 превратить в 0001, что и делает |1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 08:55 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryDima T, тогда надо будет результат побитово умножить на 1. не поможет т.к. 0&1 = 0. Твой сдвиг дает либо 0000 либо 1111, т.е. для положительных надо дополнительно 0000 превратить в 0001, что и делает |1 нет, мне это не нужно. Для положительных я буду иметь 0, для отрицательных 1. И дальше такой код Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 09:04 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Коллеги а какова цена вопроса? Что мы хотим? 1) Оптимизировать скорость? В этом случае нам надо искать Ассемблер для целевой конфигурации и внимательно смотреть в нём команды, abs(x,y), sgn(x,y) или их более атомарные декомпозиции. Далее считать такты и делать бенчмарки. 2) Перейти в другой базис? Актуально для цифровой системотехники. Искать программно-аппаратное решение. Можно рисовать логическую машину на вентилях AND/OR/NOT и линиях задержки. Но это-ли спрашивал автор? 3) Перейти в другой ЯП? Ну тут вроде примеры уже были. Большая часть - самообман. Трудно доказать ОТСУТСТВИЕ операции IF внтри них. 4) Делать обфускацию и запутывать читателя? Нечего добавить. Можно сколь угодно усложнять функцию abs вычисляя ее через числовые ряды и умножения векторов и матриц. Усложнять вообще может любой дурак. Вы попробуйте упростить. Вобщем Генри Уоррен тычет вам свою книжку и тихо ругается сквозь зубы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 09:27 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
maytonЧто мы хотим? Фигней позаниматься Иногда полезно, я вот например узнал что >> для заполнения позиций слева использует бит знака значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 09:38 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. Осталось придумать как abs без использования if сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 09:40 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoОсталось придумать как abs без использования if сделать. так уже придумано Яростный Меч(a + b + abs(a-b)) / 2 Dima Tabs(x) = x * sign(x) Dima T & SashaMercuryint sign(int x) { return (x>>31) | 1; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 09:47 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Dima TXDiaBLoОсталось придумать как abs без использования if сделать. так уже придумано Яростный Меч(a + b + abs(a-b)) / 2 Dima Tabs(x) = x * sign(x) Dima T & SashaMercuryint sign(int x) { return (x>>31) | 1; } Да, только я пока Scheme не так хорошо знаю, чтобы это реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 09:50 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Ладно, сделал :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 09:56 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoЛадно, сделал :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Поправил. Результат таков автор9 3 115 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 09:57 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoДа, только я пока Scheme не так хорошо знаю, чтобы это реализовать. могу только подсказать как по правильному операции называются >> "битовый арифметический сдвиг вправо" | "побитовое сложение" или "логическое или" может поможет нагуглить нужное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 09:59 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Короче вот конечная версия: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 10:07 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Просто я взялся дочитать однажды заброшенный мной SICP, поэтому стараюсь при любой возможности практиковаться. Этим и обусловлен выбор языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 10:10 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoПросто я взялся дочитать однажды заброшенный мной SICP, поэтому стараюсь при любой возможности практиковаться. Этим и обусловлен выбор языка. +1 Это мега-похвально. А что такое "racket" ? Я использовал Common Lisp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 12:02 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
maytonXDiaBLoПросто я взялся дочитать однажды заброшенный мной SICP, поэтому стараюсь при любой возможности практиковаться. Этим и обусловлен выбор языка. +1 Это мега-похвально. А что такое "racket" ? Я использовал Common Lisp. В среде DrRacket по умолчанию используется язык Racket, который хоть и отличается от Scheme, но пока всё компилится, я часто забываю указать "#lang scheme" вместо "#lang racket". В общем он похож на Scheme очень, пока ещё я не наткнулся на различия. И кстати в книге же Scheme используется а не Common Lisp, я предпочёл использовать то что авторы сказали, правда не осилил компиляцию в mit-scheme, поэтому взял DrRacket, который тоже Scheme поддерживает. В нём вполне удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 12:11 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Всегда удивляло это многообразие (defun ..) (def ..) (define ..). Кстати Common-Lisp запретил переопределять max, поэтому я сделал maximum. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 14:15 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
maytonВсегда удивляло это многообразие (defun ..) (def ..) (define ..). Кстати Common-Lisp запретил переопределять max, поэтому я сделал maximum. Не, ну в Scheme переопределить ничто не мешает похоже, но для уверенности я my везде добавил в название. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 14:17 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Кстати... Scheme написан на Scheme? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 14:19 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
maytonКстати... Scheme написан на Scheme? Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 14:23 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLomaytonКстати... Scheme написан на Scheme? Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет? Думаю да. Самый самый первый "C" скорее всего был написан на Асм-ах. Иначе причинно следственная цепочка была-бы похерена и на земле воцарился-бы Сотона. А так... Кернинган и Ричи.. Другое дело што Лиспы вроде-как умеют exe-шник готовить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 14:32 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
maytonКоллеги а какова цена вопроса? Что мы хотим? 1) Оптимизировать скорость? В этом случае нам надо искать Ассемблер для целевой конфигурации и внимательно смотреть в нём команды, abs(x,y), sgn(x,y) или их более атомарные декомпозиции. Далее считать такты и делать бенчмарки. Условие задачи "без if" - это (как и всякие размотки циклов) оптимизация переходов путем сокращения количества этих самых переходов. Довольно существенно может поднять скорость. Да и снизить тоже :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 19:05 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Правда для Лиспа вообще бесполезна :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 19:06 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
maytonXDiaBLo Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет? Думаю да. Самый самый первый "C" скорее всего был написан на Асм-ах. Компилятор асма тоже был на чем-то написан. Просто тогда уровень сложности был такой что можно было код написать в тетрадке, там же перевести в байт-код и потом забить в комп и запустить. Я с этого начинал. Компилировал ручкой на бумаге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 19:17 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
У ассемблера нет компилятора. Есть символьные ассемблеры, позволяющие использовать более-менее человеко-читабельные мнемоники вместо кодов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 19:29 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
maytonДумаю да. Самый самый первый "C" скорее всего был написан на Асм-ах. на подмножестве С http://habrahabr.ru/post/180523/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 19:37 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovУ ассемблера нет компилятора. Есть символьные ассемблеры, позволяющие использовать более-менее человеко-читабельные мнемоники вместо кодов. ИМХУ: Компилировение это не что иное как преобразование человеко-читабельного в машинно-исполняемое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 20:14 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovУ ассемблера нет компилятора. Есть символьные ассемблеры, позволяющие использовать более-менее человеко-читабельные мнемоники вместо кодов.Ошибаешься. У ассемблера компиляторы есть. Собственно говоря, без компилятора ассемблер не возможен. Ассемблер это и есть набор мнемоник превращающий кода в человеко-читабельный текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 23:23 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
White OwlОшибаешься. У ассемблера компиляторы есть. Не согласен Возможно, формулировки зависят от учебного заведения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 23:28 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
ИзопропилWhite OwlОшибаешься. У ассемблера компиляторы есть. Не согласен Возможно, формулировки зависят от учебного заведения.При чем здесь учебное заведение? Чисто из определения ассемблера: https://ru.wikipedia.org/wiki/Язык_ассемблера Язык ассемблера (англ. assembly language) — машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд; автокод, расширенный конструкциями языков программирования высокого уровня, такими как выражения, макрокоманды, средства обеспечения модульности программ. Может вас смущает то что "ассемблером" называют и программу которая переводит из мнемоники в машинные кода? Но эта программа по существу и есть компилятор. В принципе можно и вручную сделать перевод из мнемоники в кода (по существу делая ручную компиляцию). Но процесс компиляции есть всегда. Правда в этом случае компилятором будет служить человек с карандашом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 23:59 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
White OwlНо эта программа по существу и есть компилятор. я привык называть эту программу ассемблером и не называю компилятором. Так учили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 00:04 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
ИзопропилWhite OwlНо эта программа по существу и есть компилятор. я привык называть эту программу ассемблером и не называю компилятором. Так учили.Ааа... ну да, ну да... Курица не птица, ЗАЗ 965 не автомобиль, и разные другие "не" из этой же серии :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 00:38 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Ассемблер - частный случай компилятора, т.к. производит трансляцию из более высокоуровневого текстового представления кода в низкоуровневый бинарный, пригодный для запуска либо скармливания линкеру, что полностью соответствует определению компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 03:44 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyАссемблер - частный случай компилятора, т.к. производит трансляцию из более высокоуровневого текстового представления кода в низкоуровневый бинарный, пригодный для запуска либо скармливания линкеру, что полностью соответствует определению компилятора. Как его ни назови, суть останется та же самая. У вас просто спор про определения, что в принципе обычное дело. Часто читаешь книжку по какой то теме, и там несколько разных определений одного и того же. Сколько людей, столько мнений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 09:14 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
White OwlСобственно говоря, без компилятора ассемблер не возможен.debug древнего DOS содержал ассемблер. Никаких компиляторов - достаточно прямолинейное превращение мнемоник в последовательность байт. Ну и стандартная для (этой) программы возможность сброса участка памяти на диск, что давало com-файл. P.S. Видел пример изощрённого bat-файла, где debug использовался, чтобы вывести строку без завершающего CRLF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 09:39 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovWhite OwlСобственно говоря, без компилятора ассемблер не возможен.debug древнего DOS содержал ассемблер. Никаких компиляторов - достаточно прямолинейное превращение мнемоник в последовательность байт. Ну и стандартная для (этой) программы возможность сброса участка памяти на диск, что давало com-файл. P.S. Видел пример изощрённого bat-файла, где debug использовался, чтобы вывести строку без завершающего CRLF У меня однажды давно Винда 98 не ставилась, из-за скандиска, он на что-то ругался. Удаление скандиска не помогало. Так я сделал исполняемый файл с одной командой "ret", и заменил им скандиск. Винда поставилась, и всё было нормально :) Дебаг тот я использовал чтобы вспомнить как будет "ret" в 16-ричном коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 09:42 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Насколько мне изменяет склероз, у виндового установщика был штатный ключ, пропускающий фазу проверки диска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 09:46 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovНасколько мне изменяет склероз, у виндового установщика был штатный ключ, пропускающий фазу проверки диска. :) Может быть. Я наверное не в курсе про него был. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 09:48 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
Мне вот другое интересно. Я провёл многие часы дни и анализируя и упрощая предикаты в if. Метод карт Карно или диаграм Вейча. Мне нравилось сворачивать сложные проверки или оптимизировать скорость просто меняя их порядок в expression. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 10:45 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
maytonМне вот другое интересно. Я провёл многие часы дни и анализируя и упрощая предикаты в if. Метод карт Карно или диаграм Вейча. Мне нравилось сворачивать сложные проверки или оптимизировать скорость просто меняя их порядок в expression. А мне раньше нравилось на ассемблере писать, ну это интересно конечно, но обычно для работы недостаточно быстро код пишется. Потому как перестал быть студентом, ассемблер забросил :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 10:54 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
XDiaBLoНикогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет? Нет, не обязательно. Первую версию надо писать на чём-то другом. А вторую версию уже можно написать на первой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 16:26 |
|
||
|
максимум без if
|
|||
|---|---|---|---|
|
#18+
White Owl Код: plaintext 1. Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. 6. Ну а если Си не любишь, то можно и на SQL сделать. Код: sql 1. Код: sql 1. Все 3 варианта хоть и без if, но скомпилируются с условным переходом. Если нужен без jump-ов, но c cmp, то такой вариант: http://ideone.com/aQW2D6 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 22:39 |
|
||
|
максимум без 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?all=1&fid=16&tid=1340042]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
105ms |
get tp. blocked users: |
1ms |
| others: | 284ms |
| total: | 594ms |

| 0 / 0 |
