2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4
 
 Re: Программный код vs. Математическая нотация
Сообщение12.10.2013, 22:28 
Заслуженный участник
Аватара пользователя


30/01/06
72407

(Оффтоп)

Xaositect в сообщении #774335 писал(а):
По стандарту она может выполниться только в случае возникновения undefined behaviour.

Ещё можно функцию abs(int) подменить на свою :-)

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение12.10.2013, 22:32 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли

(Оффтоп)

#define true false :D

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение13.10.2013, 00:07 
Заслуженный участник


28/04/09
1933
Xaositect в сообщении #774335 писал(а):
По стандарту она может выполниться только в случае возникновения undefined behaviour.
Вообще-то, очевидно, что abs(INT_MIN) > INT_MAX, поэтому abs(INT_MIN) == INT_MIN и, соответственно, abs(INT_MIN) < 0. А все из-за того, что целых чисел в компьютерном представлении $\text{---}$ четное число, а ноль $\text{---}$ только один. Поэтому положительных и отрицательных чисел разное количество, отрицательных на 1 больше. В компьютерной вещественной арифметике таких казусов не возникает (зато там возникают другие, еще более удивительные казусы :-) ).

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение13.10.2013, 00:11 
Заслуженный участник
Аватара пользователя


06/10/08
6422
EtCetera в сообщении #774447 писал(а):
Вообще-то очевидно, что abs(INT_MIN) > INT_MAX, соответственно, abs(INT_MIN) == INT_MIN и, поэтому abs(INT_MIN) < 0. А все из-за того, что всего целых чисел в компьютерном представлении четное число, а ноль $\text{---}$ только один.
Я знаю. И так делают все известные мне компиляторы/библиотеки. Но тем не менее стандарт C99, пункт 7.20.6.1.2 говорит, что "If the result cannot be represented, the behavior is undefined." с примечанием "The absolute value of the most negative number cannot be represented in two’s complement."

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение13.10.2013, 11:10 
Заслуженный участник


28/04/09
1933
Xaositect в сообщении #774448 писал(а):
И так делают все известные мне компиляторы/библиотеки. Но тем не менее стандарт C99, пункт 7.20.6.1.2 говорит, что "If the result cannot be represented, the behavior is undefined." с примечанием "The absolute value of the most negative number cannot be represented in two’s complement."
Угу. Это хороший пример того, как де-юре undefined оказывается де-факто вполне себе defined, причем весьма неприятным образом defined.

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение13.10.2013, 16:03 
Заслуженный участник
Аватара пользователя


30/01/06
72407
А undefined behaviour - это хорошее грамотное описание того, что происходит. И позволяет разработчикам библиотеки вести себя более свободно, чем если было прописано это defined, но нелепое behaviour.

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение15.10.2013, 04:53 
Аватара пользователя


22/09/09

1907
Neos в сообщении #774291 писал(а):
"Дебагер" Вас не спасет . Это средство поиска только программных ошибок.
Позвольте не согласиться! Не только "средство поиска ошибок". Изучение работы алгоритма в отладчике на конкретном частном примере очень способствует пониманию этого алгоритма. Вирт в "А+СД=П" приводит примеры работы разных сортировок (фактически "снимок" отладчика), похожее можем видеть в кн. Р.Седжвик, Фундаментальные алгоритмы на С. Сошлюсь и на свой опыт: в начале 1990х принимал участие в развитии IDE Dr Pascal (упомянута в ст. Pascal en-Wiki), центром там был аниматор (отладчик только пошагово, а тут с задержкой между шагами, кнопку каждый раз жать не надо). Эта система успешно использовалась для вводного курса по программированию в универах многих стран мира (США, Австралия, Индия и т.д.). Другое дело, что не всякий debug log достоин публикации...

-- Вт окт 15, 2013 05:16:14 --

mustitz в сообщении #774321 писал(а):
Код это статика. Его мы пишем однажды, и дальше любуемся ним. Различные преобразования кода в эквивалентный нас интересуют обычно в последнюю очередь. Найти сколько-нибудь длинную цепочку эквивалентных преобразований в программировании сравнительно тяжело.
Позвольте уточнить: преобразования (м.б. неэквивалентные :?: ) в программировании - стандартная задача. Пример, классический метод сортировки бинарным деревом:
Код:
procedure add (дерево; s : string);
if  дерево=nil then новый_узел
else if узел.dat>s then
  add (левое_поддерево,s)
else if узел.dat<s then
  add (правое_поддерево,s)
else
  дубляж
Каждый без труда перепишет этот псевдокод на своем любимом языке. И каждый преобразует его для сортировки целых чисел, а не строк (string). Подобные задачи преобразования кода возникают очень часто.

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение15.10.2013, 05:35 


10/04/12
706
bin в сообщении #775321 писал(а):
mustitz в сообщении #774321 писал(а):
Код это статика. Его мы пишем однажды, и дальше любуемся ним. Различные преобразования кода в эквивалентный нас интересуют обычно в последнюю очередь. Найти сколько-нибудь длинную цепочку эквивалентных преобразований в программировании сравнительно тяжело.
Позвольте уточнить: преобразования (м.б. неэквивалентные :?: ) в программировании - стандартная задача. Пример, классический метод сортировки бинарным деревом:


Во-первых, это расширение функционала. Полученный методом Copy+Paste новый код допиливается ручками. В результате чего программа делает некоторую новую фичу (например, сортирует не только целые числа, но и строки). Во-вторых, промежуточные вычисления никому не интересны. Для будущих читателей кода важен только результат, а не то, каким образом был получен код метода.

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение15.10.2013, 05:48 
Аватара пользователя


22/09/09

1907
mustitz
Про ООП не говорил: не метод, а простая процедура. В старой версии умела сортировать строки и не умела целые числа, в новой умеет числа, но не умеет строки ;-) Во-вторых, почему не интересны? Хочу знать как автор делает сортировку. Почему выбран такой алгоритм, а не другой? И что с дубляжем (возможны разные решения)?

расширение функционала= преобразование

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение15.10.2013, 06:17 


24/05/09

2054
Сколько времени у вас займёт прочитать вот эту функцию и понять, что она делает? А потом я выложу математическую нотацию и сравним сложность понимания.

Код:
int unknown(int x, int e, int n)
{
int r = 1;

while(e > 0)
  {
  if((e % 2 ) == 1) {r = (r * x) % n;}
  e = e / 2;
  x = (x * x) % n;
  }

return r;
}

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение15.10.2013, 09:32 


10/04/12
706
bin в сообщении #775326 писал(а):
mustitz
Про ООП не говорил: не метод, а простая процедура. В старой версии умела сортировать строки и не умела целые числа, в новой умеет числа, но не умеет строки ;-) Во-вторых, почему не интересны? Хочу знать как автор делает сортировку. Почему выбран такой алгоритм, а не другой? И что с дубляжем (возможны разные решения)?

расширение функционала= преобразование


А в математике нет расширения функционала. В математике эквивалентные преобразования. Например,

$y' - \frac{y}{x} = 0$,
$y' =\frac{y}{x}$,
$\frac{dy}{dx} =  \frac{y}{x}$,
$\frac{dy}{y} = \frac{dx}{x}$,
$\int \frac{dy}{y} = \int \frac{dx}{x}$,
$ln |y| = ln |x| + C $,
$y = Cx$

При желании мы всегда можем проделать обратный путь от $y = Cx$ к дифференциальному уравнению. Ну а в программировании чаще всего все преобразования исходника имеют гранулярность по коммитам. Ну и для коммита часто выдвигается дополнительное условие, чтобы он не рушил билд. Как вносились изменения в пределах одного коммита можно только догадываться. Системы, которые отслеживают и сохраняют всю историю редактируемого файла не получили большой популятрности, хотя реализуются тривиально. Значит, не нужно?

 Профиль  
                  
 
 Re: Программный код vs. Математическая нотация
Сообщение15.10.2013, 17:58 
Аватара пользователя


22/09/09

1907
mustitz в сообщении #775374 писал(а):
Системы, которые отслеживают и сохраняют всю историю редактируемого файла не получили большой популятрности, хотя реализуются тривиально. Значит, не нужно?
Все зависит от применяемой технологии разработки и сопровождения программного продукта. Очень часто даже к пользовательской документации прикладывается история изменений. В документации разработчиков такая история обычно представлена гораздо полнее. Как осуществлять такое документирование - вручную или автоматически - принципиальной роли не играет. Выходя за рамки чистого программирования, можно привести пример широко известной системы, хранящей всю историю редактируемых файлов. Это Википедия ;-) Но я не понял, какое отношение история изменений имеет к обсуждаемой теме? Приведенный пример цепочки тождественных преобразований (решение диффура) естественным и очевидным образом записывается с помощью мат. нотации. Но выше я как раз и сказал, что
bin в сообщении #774215 писал(а):
одно другое дополняет, но не заменяет
О чем спор? :-)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу Пред.  1, 2, 3, 4

Модератор: Модераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Osmiy, Утундрий


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group