Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Технический флейм »   Как считается CRC?
RSS

Как считается CRC?

<<Назад  Вперед>> Страницы: 1 * 2 3
Печать
 
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Вот здесь http://radiohlam.ru/?p=1406 немножко поподробнее и попонятнее.
gtnhtyrj
Изгнанный


Откуда: из лесу, вестимо.
Всего сообщений: 436
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
12 мар. 2012
Rio444 написал:
[q]
степень
[/q]
Ну а в чём противоречие то ?

Вот ежели в десятичной позиционной системе цифра домножает-ся на (основание==[10dec])^N ,т.е. в степени N , равной позиции цифры
, то в двоичной позиционной отчего бы этому быть не так ?

Между прочим давным давно даже в рк86 предложено изпользовать crc заместо контрольных сумм ( публикаци в журнале была ) и многие так и сделали. Не так уж и сложно, зато более надёжно.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
petrenko написал:
[q]
Ну а в чём противоречие то ?

Вот ежели в десятичной позиционной системе цифра домножает-ся на (основание==[10dec])^N ,т.е. в степени N , равной позиции цифры
, то в двоичной позиционной отчего бы этому быть не так ?
[/q]
Так если бы было "2^8 + 2^2 + 2^1 + 2^0", то было бы вполне понятно.
Но
[q]
Что означает "х"? При чем тут степени?
[/q]
xoiss
Advanced Member


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
Rio444 написал:
[q]
Всё, что между ними - темный лес. Или я туплю, или авторы статей переписывают друг у друга однотипные фразы, не вникая в них.
Полиномы (они же многочлены) изучал ещё в ВУЗе.
Мне непонятна запись полинома-делителя в виде "x^8 + x^2 + x^1 + x^0".
Что означает "х"? При чем тут степени?
Каким образом итоговый код соотносится с делением на полином?
Кто-нибудь разобрался?
[/q]
https://ru.wikipedia.org/wiki/Циклический_код

там всё понятно написано
(ну, правда, надо алгебру знать, чтоб прочитать)

если "на спичках", то полином — это просто такая модель
// например, как ёмкость и индуктивность можно представить мнимой компонентой комплексного сопротивления
можете вместо полиномов использовать двоичные записи целых чисел — наверное, так будет понятней и наглядней
// полиномы в этой теории появились только потому, что во времена, когда эту теорию изобрели, учёные знали, что такое полиномы, а вот двоичные числа пока ещё были не в тренде

"икс" тут вообще нипричём
считайте, что степень икса - это просто индекс при очередном коэффициенте (который 0 или 1)
суть - в коэффициентах
иксы тут это просто формальная переменная, в неё никто никогда ничего не подставляет
короче, проще и понятней работать не с полиномами, а с двоичными записями целых чисел
умножение полиномов == умножение двоичных чисел
разложение полинома на полиномы-сомножители == разложение целого числа на его множители, с представлением всех таких множителей в двоичной записи

"деление на полином" == деление на целое число

только здесь есть один нюанс, там на самом деле не "деление", а умножение на "обратную величину"
и это суть не то же самое
в некоторых множествах, например, у объекта может не существовать обратной величины (т.е. такой величины, которая при умножении на исходный объект даёт объект-единицу) — тогда на такой объект "поделить" нельзя

и ещё один нюанс, все операции выполняются по модулю!
поэтому результат такого "деления по модулю" (а точнее "умножения по модулю на обратную величину") - это совсем не равно обычному делению

в общем, чтобы "разделить полином A на полином B по модулю P", надо сделать вот что:
- найти такой полином B^-1, который является обратным данному полиному B по модулю P
- умножить полином A на полином B^-1 по модулю P

здесь вместо "полином" можно использовать "двоичное целое число"

пример (на числах):
- пусть P = 7 (двоичная запись 111)
- пусть A = 3 (двоичная запись 11)
- пусть B = 4 (двоичная запись 100)
- тогда (B^-1) mod P = "такое число, которое будучи умноженным на 4 по модулю 7, даст 1" = 2 --- т.е. B^-1 = 2 (двоичная запись 10)
// действительно (2*4) mod 7 = 8 - 7 = 1
!! короче, число 2 — есть обратная величина (ну типа как 1/n) для числа 4 по модулю 7
- тогда (A / B) mod P =def= (A * (B^-1) mod P) mod P = (3 * 2) mod 7 = 6 (двоичная запись 110)

итак, мы получили, что 3 делённое на 4 по модулю 7 даёт 6
можно, кстати, проверить результат обратным умножением... т.е. 6 умноженное на 3 по модулю 7 должно дать 4 — проверим...
... действительно (6*3) mod 7 = 18 - 7 - 7 = 4 ---- внезапно сошлось! :)

теперь от "чисел" перейдём к их двоичным записям...
получим: 11 делённое на 100 по модулю 111 даёт 110

а теперь перейдём к нашим полиномам...
получим:
полином (x+1) делённый на полином (x^2) по модулю (x^2 + x + 1) даёт полином (x^2 + x)

всё понятно?

;)
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
xoiss написал:
[q]
всё понятно?
[/q]
Спасибо, почти.

xoiss написал:
[q]
в общем, чтобы "разделить полином A на полином B по модулю P", надо сделать вот что:
[/q]
Что такое разделить, понимаю.
Что значит "по модулю P"?
kod007
Newbie


Всего сообщений: 34
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
8 янв. 2018
xoiss
Advanced Member


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
Rio444 написал:
[q]
Что такое разделить, понимаю.
Что значит "по модулю P"?
[/q]
множества чисел (или множества "объектов", в общем случае) бывают бесконечными и конечными
и те и другие — "мамы всякие нужны, мамы всякие важны"

арифметические операции на бесконечных множествах — это обычные сложение, умножение и пр.

на КОНЕЧНЫХ же множествах (на интервалах целых чисел, например) так вот просто операцию сложения не введёшь, т.к. результат может оказаться за пределами множества
// например, на множестве чисел 0..9 если сложить 5+5, то результат 10 не будет принадлежать этому множеству, хотя слагаемые принадлежат
такая "недоделанная" операция сложения на конечных множествах не имеет практического смысла

поэтому придумали операцию сложения по модулю — ну, а почему бы и не придумать
её основное свойство в том, что результат сложения-по-модулю всегда принадлежит тому же множеству
// обычную операцию сложения на бесконечных множествах можно, кстати, рассматривать как "сложение по модулю бесконечности"

короче, сложение-по-модулю — это как бы "просто сложение", но только на конечных множествах целых чисел
никакой особой супер магии в нём нет — просто это ЕДИНСТВЕННЫЙ вариант, как ещё адекватно прикрутить операцию сложения чисел к конечным множествам чисел

для множества { 0 ... (N-1) } сложение по модулю — это будет сложение по модулю N — ну, по определению
например, если N=12, а множество будет 0..11, то сложение по модулю (7 + 8) mod 12 = 3
// см. "остаток от деления" — это суть то же самое в данном случае

если на множестве (чисел, полиномов, объектов) определена операция сложения (сложения по модулю), то можно определить объект-ноль — это такой, который будучи прибавленным к любому объекту множества даёт тот же самый объект
// не каждое множество имеет объект-ноль... например, множество 2..9 не имеет

далее, на множестве можно определить операцию умножения по модулю
ну, она определяется, как и обычно, как многократное сложение по модулю

в множестве можно определить объект-единицу — это такой, который будучи умноженным на любой объект из множества даёт его же

// ... пытаюсь объяснять "на пальцах", поэтому не буду использовать мат.термины типа группы, кольца и пр. — но если есть желание, то посмотрите их сами
https://ru.wikipedia.org/wiki/Кольцо_(математика)

// понятно, что примеры с числами - это лишь частный случай

далее можно определить обратный элемент к данному — это такой, который будучи умноженным по модулю на данный элемент (на элемент, которому он обратен) даёт объект-единицу

умножение-по-модулю на обратный-по-модулю элемент к данному можно считать делением-по-модулю на данный элемент, в каком-то смысле
// один пример деления-по-модулю я приводил в пред. комменте
ещё раз обращаю внимание, что деление-по-модулю в общем случае даёт совсем не такой результат, как обычное деление

... далее... интересные свойства наблюдаются в том случае, если модуль N является простым числом — поэтому я и обозначил его P в пред. комменте
что за интересные свойства? ну, долго перечислять и даже не знаю, с чего начать — не столько интересные они, сколько полезные в плане массы практических приложений
например, там всегда существует объект, обратный к данному, — а значит вполне определена операция деления-по-модулю, что офигительно полезно в ряде прикладных задач теории чисел

ещё один пример деления по модулю:
пусть модуль будет P=13 (простое число)
множество тогда будет 0..12
поделим 6 на 3 по модулю 13 в этом множестве
для этого надо сначала найти элемент, обратный 3 по модулю 13
// сразу скажу, что (1) он существует, и (2) он определён единственным образом!
не вдаваясь в детали, элемент обратный 3 по модулю 13, — это 9 // проверим: (9*3) mod 13 = (27) mod 13 = 27-13-13 = 1 — действительно, получилась единица
теперь умножаем 6 на 9 по модулю 13: (6*9) mod 13 = (54) mod 13 = 54-13-13-13-13 = 2
итак, частное от деления 6 на 3 по модулю 13 равно, как ни странно, 2

другой пример:
пусть модуль будет P=13 (простое число)
множество тогда будет 0..12
поделим 5 на 3 по модулю 13 в этом множестве
ну, обратный элемент к 3 мы уже знаем — это 9
теперь умножаем 5 на 9 по модулю 13: (5*9) mod 13 = (45) mod 13 = 45-13-13-13 = 6
итак, частное от деления 5 на 3 по модулю 13 равно ... 6 --- внезапно

то есть вывод: деление по модулю на конечных множествах чисел (ну, не хочу я использовать официальные мат.термины) в общем случае даёт непривычные числовые результаты
ну, как прибили — так и держится, что тут скажешь ---- зато профит в том, что результат получается целым числом и никаких "остатков от деления"!!! (ну, если модуль P - это простое число)


стало ли хоть как-то понятней, что такое "модуль" ?
... и что такое "разделить по модулю" ??
Кай
Гость
Divine Assassin

Откуда: извне (from beyond)
Всего сообщений: 13709
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
8 авг. 2010
Оффтопик: Оффтопик: ...всегда ненавидел математику, а высшую, так абсолютно.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
xoiss написал:
[q]
[/q]
Большое спасибо!
Стало всё понятно об операциях "по модулю".
Более того, есть очень понятная для программистов интерпретация - арифметические операции с байтами без учета переполнения.
Например, если мы сложим два однобайтовых числа 0b1000 0000 и 0b1000 0001 (десятичные 128 и 129, шестнадцатиричные 80h и 81h) то должны получить 0b1 0000 0001 (257, 101h). Но если операция производится с 8-битными регистрами, то на выходе будет "1", а старший бит уйдет в флаг переполнения. Если его не учитывать, получится "сложение по модулю 256", верно?


Rio444 написал:
[q]
Оффтопик: ...всегда ненавидел математику, а высшую, так абсолютно.
[/q]
В преподавателями не повезло. До ВУЗа математика мне нравилась. Всё было понятно.
В ВУЗе всё было скучно. Изучали матрицы, оператор Лапласа и прочую "хрень".
Уже после окончания ВУЗа узнал, что матрицы - это коэффициенты линейных уравнений и используются для их решения.
Оператор Лапласа - для расчета электрических цепей.
Преподавательница математики то ли забыла об этом сказать, то ли сделала это очень невнятно.
А отношение уже совсем другое.
Её, понятно, эти электрические цепи нафиг не сдались, она чисто теоретик. А для нас, студентов электромеханического факультета, это был принципиальный вопрос.
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
Кстати, посмотрите страничку
http://www.sunshine2k.de/artic...g_crc.html

В отличии от прочих, дается пошаговое объяснение с примерами кода на С
с побитовыми манипуляциями "в лоб". Это довольно медленно и обычно
объясняльщики CRC сразу дают скоростные алгоритмы.
<<Назад  Вперед>> Страницы: 1 * 2 3
Печать
Полигон-2 »   Технический флейм »   Как считается CRC?
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS