lfsr_step(unsigned int):
mov eax, edi
shr eax
mov edx, eax
xor edx, -306674912
and edi, 1
cmovne eax, edx
ret
Я бы написал иначе:
lfsr_step(unsigned int):
shr eax,1
sbb ebx,ebx
and ebx, 0xedb88320
xor eax,ebx
ret
При реализации LFSR важно избегать условных переходов (JC, JNC и т.д.) потому, что в связи с псевдослучайностью последовательности предсказатель переходов процессора будет очень часто ошибаться. В результате код будет работать в разы медленнее.
Тестирование каналов связи с помощью LFSR — это хорошее дело, я этим тоже занимался. Важно, что последовательность непериодическая: некоторые искажения каналов связи на периодических сигналах не обнаруживаются.
Достойно уважения то, что вы переизобрели такие понятия, как плотность вероятности и некоторые другие.
Но, к сожалению, вы опоздали на пару сотен лет. В нынешнее время более продуктивно сначала изучить то, что изобретено другими, а уже потом изобретать своё. Можно ли поинтересоваться вашим возрастом?
Насчёт предложенного вами метода поиска максимума. Рассмотрим одномерный случай, чтобы не усложнять.
Так вот, вы имеете функцию sin(x) на сегменте [-4,4] и хотите найти её максимум. Вы делите промежуток на 2 части [-4,0]; [0, 4] и выбираете ту из них, максимум на которой больше. Главная загвоздка данного шага в том, чтобы узнать, какую половину сегмента выбрать.
Понятно, что для синуса координаты максимумов известны, но что, если ваша функция неизвестная? Для неизвестной функции вам недоступна операция нахождения максимума на промежутке. Всё, что вы можете — это вычислить значение функции в какой-нибудь точке.
Чтобы выбрать промежуток, максимум на котором больше, вам придётся вычислить одно или несколько значений в каких-то точках на каждом из промежутков-кандидатов. Сколько это будет точек? Чтобы точно найти максимум на каждой из половин, надо вычислить значения на всём бесконечном множестве точек.
Поэтому ваш метод, хотя и интересен с философской точки зрения, на практике неприменим.
Реально работающие методы поиска максимума (например, метод золотого сечения) вычисляют значение функции, руководствуясь определённой стратегией, и постепенно сходятся к максимуму. Критерий эффективности таких методов обычно в том, чтобы решить задачу за минимальное количество вычислений функции.
счетность действительных чисел ничему не противоречит, поскольку чтобы построить парадокс в какой-нибудь из их теорий вам придется предъявить число, которое нельзя записать формулой
Не обязательно предъявлять такое число. Достаточно показать, что оно существует, и что оно не принадлежит множеству вычислимых чисел.
А вы не искали по теме ультразвуковой диагностики? Там же есть методы обработки сигналов, которые воссоздают изображение «в срезах». Возможно, они применимы к вашей ситуации.
По крайней мере, удалось уточнить область применимости Стандартной модели — в сторону расширения. Это даёт информацию о том, где не надо искать открытий.
Раздел, посвящённый операционным усилителям — прочесть дважды
Дважды — мало. Надо минимум 10 раз, и после каждого раза — осмысление, обдумывание, сопоставление с другими знаниями, и ещё практика. Иначе не работает, проверял на себе.
Не всё так просто. Резисторы сопротивлением более пары-тройки мегаом в усилителях — это прямой путь к помехам, дрейфу, шуму и так далее. 420МОм — это вообще за пределами воображения. Токи утечки печатной платы и входные токи ОУ будут превышать номинальный ток через этот резистор.
Кроме того, коэффициент усиления схемы на одном ОУ не может быть выше, чем собственный коэффициент усиления ОУ. А он обычно составляет 50000-300000. Конкретно у вашего ОУ — 100e3. Так что в миллион раз на одном ОУ усилить нельзя.
Вообще не рекомендуется даже близко подходить к собственному коэффициенту усиления ОУ, так как при этом существенно возрастают нелинейные искажения, уменьшается входное сопротивление схемы, полоса пропускания, диапазон выходного напряжения и другие характеристики.
Для реализации больших коэффициентов усиления следует использовать многокаскадные схемы, где каждый каскад имеет усиление порядка 30-60.
А не было попыток поставить себе кейлоггер и оценить реальную, а не стандартную, частоту повторения символов при вводе программ?
Думаю, это ещё будет зависеть от конкретного языка программирования.
Выглядит красиво, спору нет. Профессионально и модно. Вот только помогает ли это пользователю?
Допустим, пользователь попал на эту картинку. Это значит, что его запрос не может быть исполнен или новостей нет. Сколько времени ему нужно продираться через остроумные картинки и политкорректные вежливые фразы, чтобы понять, что случился облом?
Хотя эффект подслащения горькой пилюли может и сработать раз или два за счёт таких трюков, в конце концов человек всё равно приспособится быстро понимать, что случилось. И модный читающий газету мужичок на картинке будет раздражать не менее, чем пустой экран.
Были и случаи когда модули просто жёстко умирали — т.е. система просто не грузится с умершим (что примечательно — ни одного такого случая с обычными, не ECC, модулями — они умирают «частями»)
Дело в том, что ECC не только исправляет малые ошибки, но и обнаруживает большие ошибки — такие, которые скорректировать невозможно. В результате, как только ECC-модуль начал «умирать частями», система уходит в NMI по обнаружению некорректируемых ошибок, и это происходит ещё до старта ОС.
Важно понимать разницу между суффиксами "-граф" и "-скоп".
"-scope" — суффикс, означающий «смотреть». Из Wiktionary:
From Ancient Greek σκοπέω (skopéō, “examine, inspect, look to or into, consider”). Suffix -scope Used to make terms denoting an instrument used for viewing or examination.
Etymology
From Ancient Greek suffix -γραφω (-graphō), from γράφω (gráphō, “to scratch, to scrape, to graze”), whence also -graphy.
Suffix
-graph
that writes
stenograph
(metonymically) that is written
Таким образом, "-скоп" — это прибор, который позволяет наблюдать, а "-граф" — записывающий, регистрирующий прибор. Вспомните другие приборы с этими суффиксами:
Стетоскоп, эерископ, эндоскоп, телескоп, микроскоп, спектроскоп — все они могут «смотреть», но не могут записывать.
Но «Катодный осциллограф», он же «осциллоскоп», мог только отображать сигнал, но не записывать. Поэтому, для поддержания системности и единообразия языковых правил, правильно было бы называть его «осциллоскопом», как в англоязычной среде.
Что тут сказать — надо читать классику. Эта задача хорошо рассмотрена в Numerical Recipes. Во втором издании это параграф 8.5 Selecting the Mth largest. Наверно, у Кнута ещё лучше описано.
В частности, предлагается алгоритм, похожий на Quicksort, но существенно упрощенный, с асимптотической сложностью O(n), где n — размер массива.
Поиск m максимальных элементов — это ещё не самый трудный вариант данной задачи. Что если в массиве из 10000 элементов надо найти такой, который находится на 5000м месте по величине? Это, между прочим, задача поиска медианы, часто встречается на практике.
И если у разработчика нет специализированного алгоритма выбора элемента с заданным рангом — то быстрее всего приемлемое решение можно реализовать именно через сортировку.
Считывание данных с дискет контроллером Intel 8272 может производиться в двух режимах: поиск и чтение отдельного сектора; или чтение дорожки целиком. Именно первый режим использовался для считывания операционными системами. Второй режим использовался только в защитах и спец утилитах.
При поиске сектора сигнал индексного отверстия не используется. Контроллер просто анализирует поступающие с дисковода данные на предмет заголовка нужного сектора. Как только будет найден заголовок — то за ним следуют данные, которые контроллером передаются в систему через DMA. По окончании чтения сектора генерируется прерывание процессора.
Если драйвер дисковода достаточно расторопный — то он может, получив данные одного сектора, сразу дать контроллеру команду на чтение следующего. Таким образом можно прочитать все секторы с дорожки за один оборот диска. Но, если драйвер диска слишком медленно думает — то следующий сектор может проскочить под головкой до того, как драйвер даст контроллеру команду на его считывание. В результате придётся ждать следующего оборота диска и тратить по обороту на каждый сектор, что в разы замедляет скорость чтения.
Если PC работает стабильно медленно, и драйвер дисковода никогда не успевает считать 2 рядом расположенных сектора подряд — то применяется система перемежения секторов — «Interleave». Сектора размещаются на дорожке с чередованием номеров:
1, 6, 2, 7, 3, 8, 4, 9, 5
Приведённая выше последовательность называется «2:1 Interleave». В такой системе, получив от контроллера данные первого сектора, процессор имеет ещё время, пока под головкой пробегает сектор 6, для выдачи контроллеру команды на чтение второго сектора, и при этом второй сектор будет считан на том же обороте диска. Все секторы дорожки можно считать за 2 оборота диска, что хуже, чем 1, но лучше, чем 9 (когда процессор не успевает без Interleave).
Стандартный формат MS-DOS использовал 2:1 Interleave.
Было ещё одно явление, замедляющее процесс считывания. Оно возникало при чтении секторов с нескольких дорожек. В идеале, если процессор и драйвер достаточно быстрые, и Interleave не используется — то две соседние дорожки можно прочитать за два оборота диска. В реальности, однако, после перевода головки на соседнюю дорожку предписывалось подождать 5мс для релаксации механических колебаний головки. На хороших дисководах ждать было не обязательно, но всё равно был риск прихода ошибочных данных в первые миллисекунды после перевода головки.
Таким образом, считав сектор 9 одной дорожки и дав контроллеру команду на шаг и чтение сектора 1 следующей дорожки, мы зачастую пропускали сектор 1, либо он с первой попытки считывался с ошибкой. Приходилось ждать следующего оборота диска, чтобы считать этот сектор. И снова получалась скорость считывания в 2 оборота диска на дорожку, в 2 раза меньше максимально возможной.
Для борьбы с этим явлением было придумано смещение нумерации секторов на соседних дорожках:
Таким образом создавался запас времени на успокоение головки после шага, равный длительности одного сектора. И скорость последовательного считывания составляла уже не половину от максимальной, а падала всего на 11%.
Подобные форматы дискет можно было реализовать только спец утилитами. Стандартные команды форматирования в DOS и Windows это не поддерживали и форматировали все дискеты с 2:1 Interleave.
У многих дисководов этот сигнал выдавался от балды, о чем писал Питер Нортон в своей книге
Можно пруф? Я не встречал ни одного исправного дисковода, который бы выдавал индексный сигнал от балды.
Индексный сигнал при работе дисковода необходим для следующих вещей:
1) Маркировать начало и конец записи во время форматирования: запись дорожки целиком ведётся от индекса до индекса;
2) Вести счёт оборотам диска при поиске сектора на дорожке. Если сектор не был найден после заданного числа индексных импульсов — то контроллер выдаёт ошибку «Sector not found».
3) Маркировать начало и конец считывания для операции «чтение дорожки целиком». Правда, эта операция в операционных системах обычно не использовалась, а использовалась только в защитах и сервисных утилитах для анализа и восстановления дисков.
Так вот, описанная в статье защита, когда на дорожку влезает строго определенное количество байт — она, по-вашему, каким образом определяет, сколько байт находится на дорожке? Ведь дорожка — она круглая, её можно считывать многократно и не знать, что она уже повторяется. Только по индексному отверстию и определяется начало и конец.
Форматирование дорожки — это просто её полная перезапись, включая индексные метки секторов, преамбулы для настройки ФАПЧ, промежутки между секторами и индексными метками и т.д. При форматировании некоторые контроллеры (напр. КР1818ВГ93) позволяют произвольным образом задавать структуру, расположение и содержание данных на дорожке. При этом можно разместить секторы произвольных размеров в произвольной последовательности, не обязательно начиная с первого. Возможно, именно это явление описывалось у Нортона.
Индексный сигнал дисковода используется контроллером дисковода при форматировании. Контроллеры на всех PC были одинаковые — это микросхема Intel 8272. В более поздних вариантах она была интегрирована в микросхемы чипсета, но логика её работы осталась неизменной.
Таким образом, если на каких-то дисководах индексный сигнал формируется не от датчика положения диска — то на таких дисководах, как минимум, будет невозможно форматирование дискет. Как максимум — драйвер будет зависать в случае ошибки чтения вида Sector Not Found.
Страх и ужас!
Вот альтернативная реализация 32-битного LFSR Галуа с полиномом Ethernet (0xEDB88320). Оригинал на Си:
Результат компиляции GCC 10.2:
Я бы написал иначе:
При реализации LFSR важно избегать условных переходов (JC, JNC и т.д.) потому, что в связи с псевдослучайностью последовательности предсказатель переходов процессора будет очень часто ошибаться. В результате код будет работать в разы медленнее.
Тестирование каналов связи с помощью LFSR — это хорошее дело, я этим тоже занимался. Важно, что последовательность непериодическая: некоторые искажения каналов связи на периодических сигналах не обнаруживаются.
Но, к сожалению, вы опоздали на пару сотен лет. В нынешнее время более продуктивно сначала изучить то, что изобретено другими, а уже потом изобретать своё. Можно ли поинтересоваться вашим возрастом?
Насчёт предложенного вами метода поиска максимума. Рассмотрим одномерный случай, чтобы не усложнять.
Так вот, вы имеете функцию sin(x) на сегменте [-4,4] и хотите найти её максимум. Вы делите промежуток на 2 части [-4,0]; [0, 4] и выбираете ту из них, максимум на которой больше. Главная загвоздка данного шага в том, чтобы узнать, какую половину сегмента выбрать.
Понятно, что для синуса координаты максимумов известны, но что, если ваша функция неизвестная? Для неизвестной функции вам недоступна операция нахождения максимума на промежутке. Всё, что вы можете — это вычислить значение функции в какой-нибудь точке.
Чтобы выбрать промежуток, максимум на котором больше, вам придётся вычислить одно или несколько значений в каких-то точках на каждом из промежутков-кандидатов. Сколько это будет точек? Чтобы точно найти максимум на каждой из половин, надо вычислить значения на всём бесконечном множестве точек.
Поэтому ваш метод, хотя и интересен с философской точки зрения, на практике неприменим.
Реально работающие методы поиска максимума (например, метод золотого сечения) вычисляют значение функции, руководствуясь определённой стратегией, и постепенно сходятся к максимуму. Критерий эффективности таких методов обычно в том, чтобы решить задачу за минимальное количество вычислений функции.
Не обязательно предъявлять такое число. Достаточно показать, что оно существует, и что оно не принадлежит множеству вычислимых чисел.
Дважды — мало. Надо минимум 10 раз, и после каждого раза — осмысление, обдумывание, сопоставление с другими знаниями, и ещё практика. Иначе не работает, проверял на себе.
Кроме того, коэффициент усиления схемы на одном ОУ не может быть выше, чем собственный коэффициент усиления ОУ. А он обычно составляет 50000-300000. Конкретно у вашего ОУ — 100e3. Так что в миллион раз на одном ОУ усилить нельзя.
Вообще не рекомендуется даже близко подходить к собственному коэффициенту усиления ОУ, так как при этом существенно возрастают нелинейные искажения, уменьшается входное сопротивление схемы, полоса пропускания, диапазон выходного напряжения и другие характеристики.
Для реализации больших коэффициентов усиления следует использовать многокаскадные схемы, где каждый каскад имеет усиление порядка 30-60.
Думаю, это ещё будет зависеть от конкретного языка программирования.
Сейчас даже в 8-битные микроконтроллеры встраивают контроллеры DMA.
Допустим, пользователь попал на эту картинку. Это значит, что его запрос не может быть исполнен или новостей нет. Сколько времени ему нужно продираться через остроумные картинки и политкорректные вежливые фразы, чтобы понять, что случился облом?
Хотя эффект подслащения горькой пилюли может и сработать раз или два за счёт таких трюков, в конце концов человек всё равно приспособится быстро понимать, что случилось. И модный читающий газету мужичок на картинке будет раздражать не менее, чем пустой экран.
Дело в том, что ECC не только исправляет малые ошибки, но и обнаруживает большие ошибки — такие, которые скорректировать невозможно. В результате, как только ECC-модуль начал «умирать частями», система уходит в NMI по обнаружению некорректируемых ошибок, и это происходит ещё до старта ОС.
"-scope" — суффикс, означающий «смотреть». Из Wiktionary:
С другой стороны, "-граф" соответствует:
Таким образом, "-скоп" — это прибор, который позволяет наблюдать, а "-граф" — записывающий, регистрирующий прибор. Вспомните другие приборы с этими суффиксами:
Стетоскоп, эерископ, эндоскоп, телескоп, микроскоп, спектроскоп — все они могут «смотреть», но не могут записывать.
Томограф, фонограф, виброграф, спирограф — записывающие, регистрирующие приборы.
Но «Катодный осциллограф», он же «осциллоскоп», мог только отображать сигнал, но не записывать. Поэтому, для поддержания системности и единообразия языковых правил, правильно было бы называть его «осциллоскопом», как в англоязычной среде.
Можете привести формулу расчёта прогрессивного IRPF? Есть ли в Испании понятие «Необлагаемый минимум доходов»?
Какие есть налоговые льготы для «пассажиров с детьми»?
В частности, предлагается алгоритм, похожий на Quicksort, но существенно упрощенный, с асимптотической сложностью O(n), где n — размер массива.
Поиск m максимальных элементов — это ещё не самый трудный вариант данной задачи. Что если в массиве из 10000 элементов надо найти такой, который находится на 5000м месте по величине? Это, между прочим, задача поиска медианы, часто встречается на практике.
И если у разработчика нет специализированного алгоритма выбора элемента с заданным рангом — то быстрее всего приемлемое решение можно реализовать именно через сортировку.
Считывание данных с дискет контроллером Intel 8272 может производиться в двух режимах: поиск и чтение отдельного сектора; или чтение дорожки целиком. Именно первый режим использовался для считывания операционными системами. Второй режим использовался только в защитах и спец утилитах.
При поиске сектора сигнал индексного отверстия не используется. Контроллер просто анализирует поступающие с дисковода данные на предмет заголовка нужного сектора. Как только будет найден заголовок — то за ним следуют данные, которые контроллером передаются в систему через DMA. По окончании чтения сектора генерируется прерывание процессора.
Если драйвер дисковода достаточно расторопный — то он может, получив данные одного сектора, сразу дать контроллеру команду на чтение следующего. Таким образом можно прочитать все секторы с дорожки за один оборот диска. Но, если драйвер диска слишком медленно думает — то следующий сектор может проскочить под головкой до того, как драйвер даст контроллеру команду на его считывание. В результате придётся ждать следующего оборота диска и тратить по обороту на каждый сектор, что в разы замедляет скорость чтения.
Если PC работает стабильно медленно, и драйвер дисковода никогда не успевает считать 2 рядом расположенных сектора подряд — то применяется система перемежения секторов — «Interleave». Сектора размещаются на дорожке с чередованием номеров:
1, 6, 2, 7, 3, 8, 4, 9, 5
Приведённая выше последовательность называется «2:1 Interleave». В такой системе, получив от контроллера данные первого сектора, процессор имеет ещё время, пока под головкой пробегает сектор 6, для выдачи контроллеру команды на чтение второго сектора, и при этом второй сектор будет считан на том же обороте диска. Все секторы дорожки можно считать за 2 оборота диска, что хуже, чем 1, но лучше, чем 9 (когда процессор не успевает без Interleave).
Стандартный формат MS-DOS использовал 2:1 Interleave.
Было ещё одно явление, замедляющее процесс считывания. Оно возникало при чтении секторов с нескольких дорожек. В идеале, если процессор и драйвер достаточно быстрые, и Interleave не используется — то две соседние дорожки можно прочитать за два оборота диска. В реальности, однако, после перевода головки на соседнюю дорожку предписывалось подождать 5мс для релаксации механических колебаний головки. На хороших дисководах ждать было не обязательно, но всё равно был риск прихода ошибочных данных в первые миллисекунды после перевода головки.
Таким образом, считав сектор 9 одной дорожки и дав контроллеру команду на шаг и чтение сектора 1 следующей дорожки, мы зачастую пропускали сектор 1, либо он с первой попытки считывался с ошибкой. Приходилось ждать следующего оборота диска, чтобы считать этот сектор. И снова получалась скорость считывания в 2 оборота диска на дорожку, в 2 раза меньше максимально возможной.
Для борьбы с этим явлением было придумано смещение нумерации секторов на соседних дорожках:
Дорожка 0 — 1, 2, 3, 4, 5, 6, 7, 8, 9
Дорожка 1 — 9, 1, 2, 3, 4, 5, 6, 7, 8
Дорожка 2 — 8, 9, 1, 2, 3, 4, 5, 6, 7
Таким образом создавался запас времени на успокоение головки после шага, равный длительности одного сектора. И скорость последовательного считывания составляла уже не половину от максимальной, а падала всего на 11%.
Подобные форматы дискет можно было реализовать только спец утилитами. Стандартные команды форматирования в DOS и Windows это не поддерживали и форматировали все дискеты с 2:1 Interleave.
Можно пруф? Я не встречал ни одного исправного дисковода, который бы выдавал индексный сигнал от балды.
Индексный сигнал при работе дисковода необходим для следующих вещей:
1) Маркировать начало и конец записи во время форматирования: запись дорожки целиком ведётся от индекса до индекса;
2) Вести счёт оборотам диска при поиске сектора на дорожке. Если сектор не был найден после заданного числа индексных импульсов — то контроллер выдаёт ошибку «Sector not found».
3) Маркировать начало и конец считывания для операции «чтение дорожки целиком». Правда, эта операция в операционных системах обычно не использовалась, а использовалась только в защитах и сервисных утилитах для анализа и восстановления дисков.
Так вот, описанная в статье защита, когда на дорожку влезает строго определенное количество байт — она, по-вашему, каким образом определяет, сколько байт находится на дорожке? Ведь дорожка — она круглая, её можно считывать многократно и не знать, что она уже повторяется. Только по индексному отверстию и определяется начало и конец.
Форматирование дорожки — это просто её полная перезапись, включая индексные метки секторов, преамбулы для настройки ФАПЧ, промежутки между секторами и индексными метками и т.д. При форматировании некоторые контроллеры (напр. КР1818ВГ93) позволяют произвольным образом задавать структуру, расположение и содержание данных на дорожке. При этом можно разместить секторы произвольных размеров в произвольной последовательности, не обязательно начиная с первого. Возможно, именно это явление описывалось у Нортона.
Индексный сигнал дисковода используется контроллером дисковода при форматировании. Контроллеры на всех PC были одинаковые — это микросхема Intel 8272. В более поздних вариантах она была интегрирована в микросхемы чипсета, но логика её работы осталась неизменной.
Таким образом, если на каких-то дисководах индексный сигнал формируется не от датчика положения диска — то на таких дисководах, как минимум, будет невозможно форматирование дискет. Как максимум — драйвер будет зависать в случае ошибки чтения вида Sector Not Found.