Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет pilpilon ([info]pilpilon)
@ 2007-01-03 23:56:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Крайне весело
http://thedailywtf.com/forums/thread/109402.aspx


(Добавить комментарий)


[info]freebornman@lj
2007-01-03 19:00 (ссылка)
Ха-ха-ха! Я, правда, первое тоже сразу не сообразил. Но второе - это шедевр!

(Ответить) (Ветвь дискуссии)


[info]pilpilon@lj
2007-01-03 19:21 (ссылка)
Самое прекрасное там -- комменты.
На двадцатой попытке предложить правильную версию я сломался.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]freebornman@lj
2007-01-03 19:30 (ссылка)
Я тоже сломался :-)) Но - не поверите - сам сел потом и разобрался - нехитрое дело же. Но все-таки с определением отрицательного числа - это гениально.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]pilpilon@lj
2007-01-03 19:51 (ссылка)
Нехитрое, конечно.
Главное проверить, что случай step == 0 учтен :)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]freebornman@lj
2007-01-03 19:57 (ссылка)
:-)))) Фиг с ним с нулем!!! Exception ловить будем!

(Ответить) (Уровень выше)


[info]alikr@lj
2007-01-03 19:12 (ссылка)
Да, забавно. Ребята молодцы - и сами поработали и других без куска хлеба не оставили.

(Ответить) (Ветвь дискуссии)


[info]pilpilon@lj
2007-01-03 19:21 (ссылка)
Комменты там тоже рулят не по детски.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]alikr@lj
2007-01-03 19:40 (ссылка)
По своей практике помню как я доказывал одному очень толковому программисту что a*(b + c) = a*b + a*c, с точностью до значащих разрядов. Потратил где то полчаса времени, на формальное доказательство и примеры.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]pilpilon@lj
2007-01-03 19:55 (ссылка)
Именно, именно до значаших разрядов !

(Ответить) (Уровень выше)


[info]freebornman@lj
2007-01-03 20:52 (ссылка)
Правильно, программист, ведь, если не проверит - не поверит :-))

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]alikr@lj
2007-01-04 01:03 (ссылка)
Собственно доказательство было проигнорировано. На вопрос "ну и что?" мне ответить было уже нечего. Парень признал что скорее всего скобки можно открыть только после где то пятого примера.
Но при всем при том парсеры он писал замечательные! И конструкторы для пользовательских отчетов тоже!

(Ответить) (Уровень выше)

С точностью до значащих разрядов?
[info]glan@lj
2007-01-04 06:52 (ссылка)
Интересно бы послушать эту часть формального доказательства. Программист видимо действительно был достаточно толковый и помнил не только уроки арифметики, но и уроки программирования :-))
Забавно, но больше всего как раз запомнилось, как года 3 - 4 назад я пострал от "математиков" в программировании. Пытался я тогда купить через интернет билеты у одной маленькой карибской авиакомпании. После долгого и нудного заполнения четырех экранов с кучей полей я наконец добрался по последнего, с заветной кнопкой "купить". Облегченно вздохнув, нажимаю эту кнопку. А они мне говорят - пока вы тут думали, цена билетов изменилась типа с 157.35 на 157.35, если вас новая цена устраивает - жмите кнопку "купить". Ну всяк бывает - на этот раз не долго думая жму кнопку, а они мне в ответ пишут опять про новую цену. Раз на 5ый я уже смирился с необходимостью звонить и покупать билеты по телефону, но решил посмотреть на код выдаваемой страницы -а там, в java script, достаточно быстро нашлась та самая проверка на равенство: a*(b + c) == a*b + a*c.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: С точностью до значащих разрядов?
[info]alikr@lj
2007-01-04 07:22 (ссылка)
Такое бывает регулярно. Ну забыли раунды поставить. Но в моем примере я специально отметил, что это был другой случай. Считалось все до конца.

(Ответить) (Уровень выше)

Re: С точностью до значащих разрядов?
[info]pilpilon@lj
2007-01-04 09:15 (ссылка)
Странные же уроки программирования он помнил :)


Ошибка в скрипте вовсе не в том, что полагалось a*(b+c)== a*b + a*c . Это как раз правильно.
Ошибка в том, что деньги не хранят в пременных с плавающей точкой никогда.
А так, конечно,
>>> a = 3.33
>>> c = 5.7999
>>> b = 8.7999
>>> b = b-1
>>> (a*b + a*c) == (a*(b+c))
False
>>>


Как и было сказано -- с точностью до значащих цифр :)

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: С точностью до значащих разрядов?
[info]glan@lj
2007-01-04 09:49 (ссылка)
Погоди,
Деньги, как известно, хранят в банках, с пластмассовой крышкой. А вот значащих цифр в компьютере ограниченное количество.
Я с програмиированием в банковской сфере не сталкивался, но как же идея крысы из нержавеющей стали? Впрочем, если считать все в целых числах и отбрасывать лишние знаки - она, как раз, будет работать.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: С точностью до значащих разрядов?
[info]pilpilon@lj
2007-01-04 10:30 (ссылка)
когда говорят , что a равно b с точностю до 3, допустим, значащих цифр, имеют ввиду,
что a - b < 0.001 .

А про деньги пример простой:
покет молока стоил 5 шекелей.
потом молчные продукты подорожали на 1.5 процента.
Сколько стоит 20 пакетов молока?

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: С точностью до значащих разрядов?
[info]glan@lj
2007-01-05 07:49 (ссылка)
Ну 20 пакетов молока очевидно стоят 100 шекелей, т.к. один стал стоить 7.5, и продавцы на эти самые полтора процента и живут (c) не мой

А вот идею про раскрытие скобок в вычислениях с плавающей точкой я похоже не донес. Вот пример:
a = 10000000001.0;
b = 10000000002.0;
c = -10000000001.0;
точность 12 знаков, программа на С, тип переменных double.

Будут ли равны a*(b+c) и a*b + a*c с точностью до 12 знаков?
(Возможно надо будет вставить нули после первой единицы, в зависимости от вкусов твоего компилятора).

(Ответить) (Уровень выше)

Re: С точностью до значащих разрядов?
[info]pilpilon@lj
2007-01-04 10:35 (ссылка)
Я , кстати, не знаю, сколько.

(Ответить) (Уровень выше)