Вы делаете это неправильно

По-моему, почти в каждый курс программирования входит задачка вроде «напишите программу, решающую квадратные уравнения». Обычно это второе или третье задание после «Hello, world!» — считается, что это хороший способ продемонстрировать нетривиальные инструкции ветвления. «Хорошее» решение сводится к вычислению дискриминанта и в случае, если он неотрицательный — вычислению корней квадратного трехчлена ax2+bx+c по формуле, известной из курса алгебры за седьмой, что ли, класс:

square1

Вот такой вариант решения обычно считается более-менее приемлемым (хотя его можно/нужно обвешать еще несколькими проверками — например, не равен ли коэффициент a нулю?):

int solve(double a, double b, double c, double *x1, double *x2){
	double d = b*b - 4.*a*c;
	if( d >= 0 ){
		d = sqrt(d);
		*x1 = (-b + d)/(2.*a);
		*x2 = (-b - d)/(2.*a);
		return 0;
	}
	return -1;
}

В чем проблема? На первый взгляд все более-менее хорошо, но… Давайте для тестирования будем подсовывать уравнения с известными корнями — используя для этого теорему Виета. А именно, зафиксируем коэффициент a=1, тогда уравнение с корнями x1 и x2 будет иметь коээффициенты b=-(x1+x2) и c=x1x2. Сравнивая корни, полученные при решении уравнения, с известными нам, оценим «качество» решения.

Если корни «нормальные» — те, с которыми справится шестиклассник — то все хорошо. Но что будет, если взять два «нехороших» корня — к примеру, x1=1, x2=10-14 (это для double; если вы пользуетесь float — то возьмите второй корень, равный 10-5)? Проверьте — не забыв включить вывод максимально возможного количества значащих цифр (в printf лучше всего использовать форматный спецификатор %g, при использовании вывода в стиле C++, через iostream, такой вывод включен по умолчанию). Ошибка при вычислении второго корня возникнет уже в четвертой значащей цифре, это, на самом деле, уже довольно неприлично.

В чем дело? Если обратить внимание на «обычную» формулу для вычисления корней квадратного уравнения, то мы увидим, что при вычислении меньшего корня корень из дискриминанта вычитается из b — а так как они в этом случае очень близки, то возникающая при этом вычислительная ошибка оказывается слишком большой.

Метод, разумеется, можно улучшить. Для начала — можно вспомнить о существовании еще одной формулы для корней квадратного уравнения:

square2

Выводится она абсолютно аналогичным образом, от «классической» отличается тем, что «не работает» при c=0.

Если переписать программу, чтобы она использовала эту формулу — то меньший корень «нехорошего» уравнения будет вычисляться точно, а проблемы возникнут с большим корнем. Причина та же самая — вычитание двух близких по величине чисел. Но ведь если вычислять больший корень по первой формуле, а меньший — по второй, то эта проблема исчезнет! Поэтому более правильный метод решения квадратного уравнения должен выглядеть так:

— вычисляем дискриминант D=b2-4ac
— если дискриминант неотрицателен, то вычисляем

q

— корни уравнения равны q/a и c/q.

Как реализовать это в программе — довольно очевидно, это особо ее не усложнит.

Какая здесь мораль? Численные методы и программирование — это две совершенно разных области человеческого знания. Математические задачки — вроде решения квадратного уравнения — могут показаться интересными с точки зрения обучения программированию, но это «чужая территория», и можно столкнуться с совершенно непредсказуемыми вещами. Признайтесь, многие ли слышали о сложностях, возникающих при решении на компьютере квадратных уравнений — хотя казалось бы, что может быть проще?

Продолжим про скульпторов

В википедической статье про Арно Брекера было написано примерно следующее:

Две скульптуры «Провозвестник» и «Призвание» из ателье в Йекельсбрухе были позже установлены в Эберсвальде на стадионе 20-й армии Группы советских войск в Германии. Вместе с двумя женскими статуями Фрица Климша, а также двумя скульптурами коней Йозефа Торака из сада рейхсканцелярии они стояли там до лета 1989 года.

Как-то недосказанно получилось — что за статуи, куда они делись летом 1989, ну и так далее. Начал разбираться — и на форуме «Назад в ГСВГ» нашел две фотографии из Эберсвальде:

eberswalde2

eberswalde1

По словам форумчан, когда ГДР «дышал на ладан», бронзовые статуи (а это были не только статуи Брекера с этих фото, но и две женские фигуры работы Фрица Климша, и статуи коней Йозефа Торака) сдали в переплавку. С одной стороны — странно, мне так кажется, что их ценность все более-менее осознавали; с другой — а фиг поймешь этих немцев, когда дело касается «любимого скульптора Гитлера».

Но у истории есть продолжение — оказывается, в 2015 году в Бад-Дюркхайме нашли статуи из Эберсвальде — тут пишут про коней Йозефа Торака, но я встречал и упоминания работ Брекера, например, по второй ссылке:

http://p.dw.com/p/1FTED
http://artguide.com/posts/1167#footnote-4

Особенно, конечно, порадовали статьи в немецкой прессе — например, эта:

http://www.sueddeutsche.de/kultur/kunstobjekte-aus-dem-dritten-reich-ausstellen-nicht-verstecken-1.2492736

Всерьез пишут, что показывать вот этих коней или мускулистых мужиков Брекера (не говоря уж об истинно арийских женщинах Климша) на выставке — это пропаганда нацизма. Скажите, а вам действительно первым делом хочется зигануть при взгляде на примерно такую скульптуру?

fritz-klimsch-olympia

Передовое штурманское оборудование

odometer-boards

Приехали платы для «серой коробочки» — и что интересно, почти все устройства уже «предзаказаны».

И про искусство

Прочитал в ЖЖ [info]babs71 про мемуары Вернера Ланге «Художники во Франции во время оккупации». Заинтересовался историей про Дину Верни, натурщицу Аристида Майоля, и загуглил, за что ее упекли в гестапо. Загуглил, узнал много нового и интересного — не только про французов, но и про Арно Брекера, например. Не откажите себе в удовольствии, походите хотя бы по ссылкам из педивикии.

Для состоятельных парней

Проперла монетизация в программке для учета личных финансов Coin Keeper:

coinkeeper

Добавить дополнительный источник дохода могут только состоятельные парни, отбашлявшие авторам программы :)

Пьяные командиры из теплых бункеров в глубоком тылу гнали бойцов в атаку!

http://inosmi.ru/social/20170626/239657112.html

Забыл добавить, что это про финнов.

Цитатка

Популярно о блокчейн: блоки с траназкциями собираются в цепочку с помошью хешей, или своего рода «хештегов» известных нам по твиттеру

Орфография и пунктуация оригинала сохранены.

Про ценообразование в Чип-и-Дипе

Возникла у меня необходимость купить десяток вот таких разъемов:

bh10r

Разъем «ходовой», обычно стоит копейки — 5-10 рублей даже в розницу — но не в этот раз. От цены на сайте я чуть не упал со стула — разъемы предлагали аж по 33 рубля штука! Над строчкой с ценой красовались надписи «Осталось более 100 штук» и «Ожидается поставка 100500 штук буквально завтра».

Логично предположить, что дело именно в том, что складские остатки выгребли практически подчистую, и подождать поставки большой партии — но ее так и не было, а сегодня, зайдя на сайт, я увидел эти же разъемы по 57 рублей с пометкой «Осталось более 80 штук».

Интересно, кому эти разъемы были нужны настолько, что он купил 20 штук за 660 рублей?

Юридический вопрос

Что будет, если труп найдут в пограничной зоне, на контрольно-следовой полосе?

Всю неделю неспешно ремонтировал полуось на «Волге». Выглядело это так — приволок машину на эвакуаторе на улицу маршала Полубоярова, поставил ее на «люберецкой» стороне, а затем снял полуось, поставил авто на кирпичики и начал эпопею с ремонтом этой самой полуоси — о которой можно было бы рассказать и отдельно, конечно. Но интересует меня другой вопрос. Как известно, граница между, не побоюсь этого слова, двумя субъектами федерации, Москвой и Московской областью, проходит по правому бордюру улицы маршала Полубоярова. В каждом из этих субьектов действует свой местный кодекс об административных правонарушениях. Естественно, в каждом из них есть статья за загрязнение территории, связанное с ремонтом транспортных средств — в московском это статья 8.8 (от предупреждения до 3000 рублей), в областном — статья 6.3 (от 3000 до 5000 рублей).

Вот предположим — сижу я на территории Московской области на корточках с полуосью в руках, рядом, на территории Москвы, стоит машина на кирпичиках, а из чулка моста на территорию все той же Москвы капает очень полезное минеральное масло ТАД-17, сделанное из древних динозавров. Совершаю ли тем самым какое-либо правонарушение из предусмотренных КоАПами Москвы и Московской области, если да, то какое, где находится место совершения правонарушения, и какие органы уполномочены составить протокол и наказать меня?

100 дней

Пропустил очень важный срок — 17 июня истекли 100 дней с того момента, как Элон Маск пообещал разрулить ситуацию с отключениями электричества в Южной Австралии:

http://www.forbes.ru/milliardery/340633-ilon-mask-na-spor-poobeshchal-reshit-za-100-dney-problemy-yuzhnoy-avstralii-s

Южноавстралийцы тут есть? Как у вас дела?

Купил книжку

Михаил Горбачев, «Гонки в СССР»:

gonki-sssr

Открыл на первой попавшейся странице и обнаружил подробное описание регулировки кастера на ГАЗ-24 с помощью кувалды. Не зря купил.

Пиздец

Что-то какая-то черная полоса в жизни пошла. За прошедшую неделю:

— раздавил телефон;
— окирпичился видеорегистратор;
— и для полного счастья — у «Волги» вывалилась полуось, попутно ебнув по двери аж до разрыва металла.

Что дальше?

PS Прошу прощения за мат.

А за что так любят Уильяма Уоллеса?

Я тут почесал репу и понял, что почти на каждом диске с нормальной музыкой, валяющемся у меня в машине, есть какая-нибудь песня про Уильяма Уоллеса:

Grave Digger — William Wallace:

Iron Maiden — The Clansman:

Civil War — Braveheart:

И даже Infornal FuckЪ отметился песней «Храброе сердце»:

А за что его так любят?

Раздавил тачскрин

Покупка всякой электроники по принципу «х@й вам, а не санкции» ((с) Красная Плесень) влечет очень сложные размышления на тему чинить/не чинить.

Вот и в этот раз, разбив тачскрин на своем нищебродском Highscreen Pure F, мучаюсь вопросом: что делать?

Вариантов несколько:

0) Забить, пока работает. Цена вопроса — 0 рублей.
1) Заказать тачскрин у китайцев, поменять самому, цена вопроса — около 500 рублей и полтора месяца ожидания запчастей.
2) Купить и поставить тачскрин в Москве, цена вопроса — 1500-2000 рублей.
3) Купить новый телефон, цена вопроса — 5000-6000 рублей.

Склоняюсь все-таки к варианту 1 — но вспоминается мне аналогичный тачскрин на бомжепланшете Oysters, который стоил ровно половину этого планшета — 1000 рублей за тачскрин или 1999 за планшет в МВидео. Счастье мое, что тут не возникает принципиальных вопросов типа «КЗАТЭ vs ПРАМО«, а то размышлять бы пришлось долго :)

Автомобильный линукс, или буллшит-бинго

Сколько знакомых названий вы можете насчитать в этом абзаце?

Эталонный дистрибутив AGL основан на наработках проектов Tizen, GENIVI и Yocto. Графическое окружение базируется на Qt, Wayland и композитном сервере Weston IVI Shell. Для создания приложений применяются технологии HTML5 и Qt. Развивается набор прототипов типовых приложений, среди которых реализация домашнего экрана, web-браузер, приборная панель, навигационная система, климат-контроль, мультимедийный проигрыватель с поддержкой DLNA, интерфейс для настройки звуковой подсистемы, программы для чтения новостей, средства голосового управления, поиска информации, взаимодействия со смартфоном по Bluetooth и подключения к CAN-сети для доступа к датчикам и передачи данных между узлами автомобиля. Исходные тексты наработок проекта доступны под свободными лицензиями через Git.

http://citforum.ru/news/37415/

И второй вопрос — а вам не страшно?

Делайте ваши ставки

Ездил «нулем» на ретро-ралли «Автострада» в Туле. Прикидываю сейчас бюджет поездки.

0000

В плюсе за выходные — 12000 рублей от продажи TSD Navigator и датчиков к нему. В минусе — около 2000 за бензин и около 2000 — «на бухло и провиант». Вопрос — хватит ли оставшихся 8000, чтобы оплатить штрафы, собранные по дороге из Москвы в Тулу, где меньше 130 я принципиально не ехал?

Шестнадцатилетие

Нашел в кучке автодокументов вот такую бумажку (кликабельно):

3111-16yrs

Судя по дате сборки — моей «Волге» сегодня исполняется 16 лет, а это значит, что слова «ебался в гараже» теперь можно произносить безнаказанно :)