Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: максимум без if  [new]
XDiaBLo
Member

Откуда: Екатеринбург
Сообщений: 71552
mayton
Всегда удивляло это многообразие (defun ..) (def ..) (define ..).

Кстати Common-Lisp запретил переопределять max, поэтому я сделал maximum.

Не, ну в Scheme переопределить ничто не мешает похоже, но для уверенности я my везде добавил в название.
21 ноя 14, 14:17    [16885378]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Кстати... Scheme написан на Scheme?
21 ноя 14, 14:19    [16885396]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
XDiaBLo
Member

Откуда: Екатеринбург
Сообщений: 71552
mayton
Кстати... Scheme написан на Scheme?

Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет?
21 ноя 14, 14:23    [16885435]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
XDiaBLo
mayton
Кстати... Scheme написан на Scheme?

Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет?

Думаю да. Самый самый первый "C" скорее всего был написан на Асм-ах.
Иначе причинно следственная цепочка была-бы похерена и на земле воцарился-бы Сотона.
А так... Кернинган и Ричи..

Другое дело што Лиспы вроде-как умеют exe-шник готовить.
21 ноя 14, 14:32    [16885522]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6359
mayton
Коллеги а какова цена вопроса? Что мы хотим?

1) Оптимизировать скорость?

В этом случае нам надо искать Ассемблер для целевой конфигурации и внимательно
смотреть в нём команды, abs(x,y), sgn(x,y) или их более атомарные декомпозиции.
Далее считать такты и делать бенчмарки.

Условие задачи "без if" - это (как и всякие размотки циклов) оптимизация переходов путем сокращения количества этих самых переходов.
Довольно существенно может поднять скорость. Да и снизить тоже :)
21 ноя 14, 19:05    [16887451]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6359
Правда для Лиспа вообще бесполезна :)
21 ноя 14, 19:06    [16887453]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Dima T
Member

Откуда:
Сообщений: 13713
mayton
XDiaBLo
Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет?

Думаю да. Самый самый первый "C" скорее всего был написан на Асм-ах.

Компилятор асма тоже был на чем-то написан. Просто тогда уровень сложности был такой что можно было код написать в тетрадке, там же перевести в байт-код и потом забить в комп и запустить. Я с этого начинал. Компилировал ручкой на бумаге.
21 ноя 14, 19:17    [16887484]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9181
У ассемблера нет компилятора.
Есть символьные ассемблеры, позволяющие использовать более-менее человеко-читабельные мнемоники вместо кодов.
21 ноя 14, 19:29    [16887524]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Изопропил
Member

Откуда:
Сообщений: 31156
mayton
Думаю да. Самый самый первый "C" скорее всего был написан на Асм-ах.

на подмножестве С
http://habrahabr.ru/post/180523/
21 ноя 14, 19:37    [16887550]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Dima T
Member

Откуда:
Сообщений: 13713
Basil A. Sidorov
У ассемблера нет компилятора.
Есть символьные ассемблеры, позволяющие использовать более-менее человеко-читабельные мнемоники вместо кодов.

ИМХУ: Компилировение это не что иное как преобразование человеко-читабельного в машинно-исполняемое
21 ноя 14, 20:14    [16887680]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
White Owl
Member

Откуда:
Сообщений: 12384
Basil A. Sidorov
У ассемблера нет компилятора.
Есть символьные ассемблеры, позволяющие использовать более-менее человеко-читабельные мнемоники вместо кодов.
Ошибаешься. У ассемблера компиляторы есть. Собственно говоря, без компилятора ассемблер не возможен.
Ассемблер это и есть набор мнемоник превращающий кода в человеко-читабельный текст.
21 ноя 14, 23:23    [16888327]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Изопропил
Member

Откуда:
Сообщений: 31156
White Owl
Ошибаешься. У ассемблера компиляторы есть.

Не согласен

Возможно, формулировки зависят от учебного заведения.
21 ноя 14, 23:28    [16888342]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
White Owl
Member

Откуда:
Сообщений: 12384
Изопропил
White Owl
Ошибаешься. У ассемблера компиляторы есть.

Не согласен

Возможно, формулировки зависят от учебного заведения.
При чем здесь учебное заведение?
Чисто из определения ассемблера:
https://ru.wikipedia.org/wiki/Язык_ассемблера
Язык ассемблера (англ. assembly language) — машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд; автокод, расширенный конструкциями языков программирования высокого уровня, такими как выражения, макрокоманды, средства обеспечения модульности программ.

Может вас смущает то что "ассемблером" называют и программу которая переводит из мнемоники в машинные кода? Но эта программа по существу и есть компилятор.

В принципе можно и вручную сделать перевод из мнемоники в кода (по существу делая ручную компиляцию). Но процесс компиляции есть всегда. Правда в этом случае компилятором будет служить человек с карандашом.
21 ноя 14, 23:59    [16888460]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Изопропил
Member

Откуда:
Сообщений: 31156
White Owl
Но эта программа по существу и есть компилятор.

я привык называть эту программу ассемблером и не называю компилятором.
Так учили.
22 ноя 14, 00:04    [16888480]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
White Owl
Member

Откуда:
Сообщений: 12384
Изопропил
White Owl
Но эта программа по существу и есть компилятор.

я привык называть эту программу ассемблером и не называю компилятором.
Так учили.
Ааа... ну да, ну да... Курица не птица, ЗАЗ 965 не автомобиль, и разные другие "не" из этой же серии :)
22 ноя 14, 00:38    [16888594]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6359
Ассемблер - частный случай компилятора, т.к. производит трансляцию из более высокоуровневого текстового представления кода в низкоуровневый бинарный, пригодный для запуска либо скармливания линкеру, что полностью соответствует определению компилятора.
22 ноя 14, 03:44    [16888885]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
XDiaBLo
Member

Откуда: Екатеринбург
Сообщений: 71552
Anatoly Moskovsky
Ассемблер - частный случай компилятора, т.к. производит трансляцию из более высокоуровневого текстового представления кода в низкоуровневый бинарный, пригодный для запуска либо скармливания линкеру, что полностью соответствует определению компилятора.

Как его ни назови, суть останется та же самая. У вас просто спор про определения, что в принципе обычное дело. Часто читаешь книжку по какой то теме, и там несколько разных определений одного и того же. Сколько людей, столько мнений.
22 ноя 14, 09:14    [16889011]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9181
White Owl
Собственно говоря, без компилятора ассемблер не возможен.
debug древнего DOS содержал ассемблер.
Никаких компиляторов - достаточно прямолинейное превращение мнемоник в последовательность байт.
Ну и стандартная для (этой) программы возможность сброса участка памяти на диск, что давало com-файл.

P.S. Видел пример изощрённого bat-файла, где debug использовался, чтобы вывести строку без завершающего CRLF
22 ноя 14, 09:39    [16889040]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
XDiaBLo
Member

Откуда: Екатеринбург
Сообщений: 71552
Basil A. Sidorov
White Owl
Собственно говоря, без компилятора ассемблер не возможен.
debug древнего DOS содержал ассемблер.
Никаких компиляторов - достаточно прямолинейное превращение мнемоник в последовательность байт.
Ну и стандартная для (этой) программы возможность сброса участка памяти на диск, что давало com-файл.

P.S. Видел пример изощрённого bat-файла, где debug использовался, чтобы вывести строку без завершающего CRLF

У меня однажды давно Винда 98 не ставилась, из-за скандиска, он на что-то ругался. Удаление скандиска не помогало. Так я сделал исполняемый файл с одной командой "ret", и заменил им скандиск. Винда поставилась, и всё было нормально :) Дебаг тот я использовал чтобы вспомнить как будет "ret" в 16-ричном коде.
22 ноя 14, 09:42    [16889043]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9181
Насколько мне изменяет склероз, у виндового установщика был штатный ключ, пропускающий фазу проверки диска.
22 ноя 14, 09:46    [16889047]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
XDiaBLo
Member

Откуда: Екатеринбург
Сообщений: 71552
Basil A. Sidorov
Насколько мне изменяет склероз, у виндового установщика был штатный ключ, пропускающий фазу проверки диска.

:) Может быть. Я наверное не в курсе про него был.
22 ноя 14, 09:48    [16889048]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Мне вот другое интересно. Я провёл многие часы дни и анализируя и упрощая предикаты в if.
Метод карт Карно или диаграм Вейча. Мне нравилось сворачивать сложные проверки или
оптимизировать скорость просто меняя их порядок в expression.
22 ноя 14, 10:45    [16889106]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
XDiaBLo
Member

Откуда: Екатеринбург
Сообщений: 71552
mayton
Мне вот другое интересно. Я провёл многие часы дни и анализируя и упрощая предикаты в if.
Метод карт Карно или диаграм Вейча. Мне нравилось сворачивать сложные проверки или
оптимизировать скорость просто меняя их порядок в expression.

А мне раньше нравилось на ассемблере писать, ну это интересно конечно, но обычно для работы недостаточно быстро код пишется. Потому как перестал быть студентом, ассемблер забросил :(
22 ноя 14, 10:54    [16889117]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 57451
Блог
XDiaBLo
Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет?

Нет, не обязательно. Первую версию надо писать на чём-то другом. А вторую версию уже можно написать на первой.
22 ноя 14, 16:26    [16890030]     Ответить | Цитировать Сообщить модератору
 Re: максимум без if  [new]
Вася Уткин
Guest
White Owl
c = a<b ? b : a;

c = max(a,b);

c=0;
while(a>0 && b>0) {
    c++;
    a--;
    b--;
}


Ну а если Си не любишь, то можно и на SQL сделать.
select @c = case when @a<@b then @b else @a end

select @c = max(v) from (select v=a union select b) t

Все 3 варианта хоть и без if, но скомпилируются с условным переходом.

Если нужен без jump-ов, но c cmp, то такой вариант:
http://ideone.com/aQW2D6
#include <iostream>
using namespace std;

inline int func(int a, int b) {
	int ab[2] = {a, b};
	return ab[a<b];
}


int main() {
	
	cout << func(5, 4);
	
	// your code goes here
	return 0;
}
22 ноя 14, 22:39    [16890922]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Программирование Ответить