Как стать автором
Обновить
65
0
Дмитрий Майоров @dimview

Неправильные, но полезные модели

Отправить сообщение
Во-первых необязательно знать обе области на самом высоком уровне. Так действительно бывает редко. Но если программист не знает закон Ома, а электронщик не умеет написать цикл, то в embedded им обоим делать нечего. Никаких сверхестественных способностей для этого не надо, любой выпускник нормального ВУЗа вполне может справиться с электроникой в пределах Хоровица и Хилла и программированием в пределах трупа Страуса.

Во-вторых никто не заставляет сначала 20 лет учиться, а только потом работать. Это делается одновременно. Просто если только писать код (особенно на одном языке, в одной среде разработки и той же самой предметной области), то можно очень легко и быстро остаться без работы. Окулист или водопроводчик без работы не останется, а попробуйте сейчас найти позицию программиста на языке GOC в операционной системе GEOS. Пример, кстати, взят из реальной жизни.

Ну и заодно давайте я вам сэкономлю немного времени. Попытки сделать визуальную среду программирования для непрограммистов предпринимались неоднократно и все они окончились безуспешно. Потому что загвоздка там не в том, соединять квадратики линиями или писать if.
Это не фантастика, а так и должно быть. Самые интересные работы находятся на стыке областей, и чтобы там преуспеть, надо хорошо разбираться в обоих.

Например, программирование и схемотехника (что покрывает по сути всю современную электронику, как промышленную, так и потребительскую). Или статистика и программирование (big data). Или программирование и финансы (high frequency trading).

А что на освоение двух предметных областей уйдёт не 10 лет, а 20 — так они всё равно уйдут.
Ключевое слово было упомянуто в статье — Хоровиц. Если полнее — Хоровиц и Хилл, «Искусство схемотехники». После прочтения новой главы проверять усвоенное применением на практике. В порядке увеличения сложности — усилитель низкой частоты, радиоприёмник, часы, терменвокс, миноискатель, шифровальная машина и так далее. Всё это делается безо всяких ардуин и с минимумом дополнительного оборудования.
Варианты «совершенный» и «точный» не подходят — модели по определению являются грубым приближением к реальности, к тому же коэффициенты подгоняем по случайной выборке, то есть неизбежны ошибки. На приведённом графике видно, что improper model зачастую показывает лучше результат, чем proper (распределения Gini перекрываются).

Кроме того, в оригинале тогда было бы perfect или exact, а судя по совсем не статистическому слову beauty там та же игра слов про «клеить модель в клубе».
А как надо было перевести? translate.ru предлагает «надлежащий, приличный, присущий, самый» и «неподходящий, неуместный, неправильный, непристойный, незаконный».

А «improper model» переводит как «неподходящая модель», что совсем неправильно — модель-то как раз подходящая.
Нет, идея в том, чтобы вообще ничего не перебирать. Не обучать модель, а выбрать значения коэффициентов исключительно на основании априорных знаний.
Чтобы этого избежать, используется сглаживание Лапласа. Например, если функция использовалась n раз и из них k раз с ошибкой, то оценка вероятности ошибки (k+2)/(n+4).

Источник: Alan Agresti, Brian Caffo — Simple and Effective Confidence Intervals for Proportions and Differences of Proportions Result from Adding Two Successes and Two Failures
В комментариях пишут то же самое, про convergents of continued fractions. Их можно посчитать через WolframAlpha, например, Last[Convergents[Pi, 6]] = 104348/33215. Но выигрыша нет — надо запоминать 11 цифр, чтобы получить π с точностью 10 цифр.

В любом случае много цифр запоминать смысла нет, так что это уже искусство для искусства.
Посмотрите на картинку в начале статьи. Этот калькулятор питается от маленькой солнечной батареи, и даже солнца ему не надо — достаточно настольной лампы. Тактовая частота меряется не в гигагерцах и даже не в мегагерцах, а в килогерцах. Для него одно умножение занимает миллисекунды, а чтобы многочлен посчитать уже секунды уйдут, неприемлемо.

Разработчики калькуляторов это ещё в семидесятые годы прикинули и вышло, что CORDIC лучше. Разумеется, на более привычном процессоре помощнее всё может оказаться наоборот.
Любой алгоритм может найти ограниченное количество ошибок. Но можно выбрать из возможных квазигрупп такую, которая находит больше фонетических ошибок и меньше нефонетических.

Поскольку люди чаще совершают фонетические ошибки, такой алгоритм на практике будет обнаруживать больше ошибок.
Умножение на калькуляторе — дорогая операция, реализуется программно. А сложение и сдвиг — дешёвые, реализованы аппаратно. Поэтому и не используются приближения многочленами или рядами.
почему в вычислении синуса «по цифрам» не делалось округления при сдвиге

Думаю, что для простоты. Попробовал предложенный вариант, получил тот же результат.

заменить вторую половину на обычное умножение

Умножение на калькуляторе — дорогая операция. В частности именно поэтому не используются приближения многочленами или рядами.
Вот тут товарищ Jon McLoone специально искал и не нашёл ничего лучше: All Rational Approximations of Pi Are Useless.
В оригинальной статье есть тестовые векторы, они же используются в примерах кода и результаты совпадают. Но даже если там что-то перепутано, оба устройства скорее всего будут использовать ту же самую библиотеку с тем же самым порядком, а на криптостойкость порядок не влияет.
Вы наверное имели в виду ряд Тейлора. Это как раз и есть первое из описанных решений.

Ряд Фурье для синуса будет очень коротким (все коэффициенты, кроме одного, равны нулю).
a) Верно, именно так, например, считается синус в библиотеке C когда нет поддержки плавающей точки. Но на калькуляторах так делают редко. Умножение на калькуляторе — дорогая операция, а в CORDIC используются только сложение и сдвиги.

б) Я раньше тоже так думал, но на практике ни разу не встречал. Подозреваю, что это весьма редкое явление.
Спасибо за обратную связь, добавил параграф до ката. Исходно хотел сделать условие задачи как можно короче, чтобы можно было понять, не вчитываясь.
Верно. Это то же самое разложение в ряд, только ряд короче.
masai всё правильно написал.

Если вопрос про вход 0 и вход 1 касается раундовой функции, то это два слова, из которых состоит блок. Например, у Speck 64/128 длина блока 64 бит. Этот блок разбивается на два слова по 32 бит -вход 0 и вход 1. После шифрования получается тоже два слова, выход 0 и выход 1.

В режиме CTR на вход 0 можно подать счётчик, на вход 1 — nonce. Последовательность входных бит разбить на блоки и ксорить с выходом Speck, увеличивая счётчик после каждого блока.
Надо отметить, что в данном случае линейный криптоанализ был чисто теоретической атакой. На практике проще перебрать в лоб 256 ключей, чем генерить 243 открытых текстов.

Собственно именно поэтому DES и вывели из употребления. В 1977 году мало кто ожидал такого роста скорости грубого перебора.

Информация

В рейтинге
Не участвует
Откуда
США
Зарегистрирован
Активность