Size: a a a

2020 May 23

AD

Aleksandr Duduk in Delphi & Lazarus
Dmitry Belkevich
конечно скатилось образование полностью, если отличник первый раз 'полином' слышит. можно только посочувствовать
Может он многочленом его называет)
источник

I

Igor in Delphi & Lazarus
ну тут тонкость в том, что как бы полиномы в crc — это не школьные многочлены
источник

DB

Dmitry Belkevich in Delphi & Lazarus
тут согласен, но термин 'полином' встречается абсолютно везде, правда. да и нам говорили явно, насколько помню. ладно. не суть
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Igor
ну тут тонкость в том, что как бы полиномы в crc — это не школьные многочлены
так то да. но хотя бы понимать что это не число хотя бы, и одна формула на всё. вот от того и путаница
источник

А

Алексей in Delphi & Lazarus
Dmitry Belkevich
function UpdateCrc16(Value: Byte; Crc16: Word): Word;inline;
begin
 Result := ((Crc16 shr 8) and $00FF) xor
   crc16tab[Byte(Crc16 xor (Word(Value)) and $00FF)];
end;


function Crc16(const Value: AnsiString): Word;inline;
var
 n: Integer;
begin
 Result := $FFFF;
 for n := 1 to Length(Value) do
   Result := UpdateCrc16(Ord(Value[n]), Result);
end;
На вход мы получаем строку
Заданм срс как переменную результат равную ffff.

Потом идёт цикл фор, от  1 до размера строки
Переменной результат присваиваем новое значение передавая расчёт в другую Функцию, отправив туда
Ord(value[n]) (наверное это первый элемент строки в байтах) и срс которая в переменной результат

Функция апдейт срс принимает первый символ и записывает так же в value, а срс в срс вместо переменной результат
А вот  дальше тут какая то непонятная магия происходит.
Почему то в право на 8 бит сдвигаем и в конец дописываем 8 единиц и выполняем исключающее или с какой то странный штукой
источник

А

Алексей in Delphi & Lazarus
Dmitry Belkevich
тут согласен, но термин 'полином' встречается абсолютно везде, правда. да и нам говорили явно, насколько помню. ладно. не суть
На первом курсе такое было, но ни как не в школе
источник

А

Алексей in Delphi & Lazarus
И то, в итоге ничего не ясно было, ТК занятий мало, а материала рассказать надо было очень много
источник

VA

Viktor Akselrod in Delphi & Lazarus
заканчивайте флуд, плз
источник

I

Igor in Delphi & Lazarus
Алексей
На вход мы получаем строку
Заданм срс как переменную результат равную ffff.

Потом идёт цикл фор, от  1 до размера строки
Переменной результат присваиваем новое значение передавая расчёт в другую Функцию, отправив туда
Ord(value[n]) (наверное это первый элемент строки в байтах) и срс которая в переменной результат

Функция апдейт срс принимает первый символ и записывает так же в value, а срс в срс вместо переменной результат
А вот  дальше тут какая то непонятная магия происходит.
Почему то в право на 8 бит сдвигаем и в конец дописываем 8 единиц и выполняем исключающее или с какой то странный штукой
операция crc ассоциативна, поэтому ты можешь заранее вычислить таблицу для всех сочетаний 8 бит и применить её к операнду
источник

I

Igor in Delphi & Lazarus
а так это всё тот же алгоритм деления столбиком
источник

А

Алексей in Delphi & Lazarus
Igor
операция crc ассоциативна, поэтому ты можешь заранее вычислить таблицу для всех сочетаний 8 бит и применить её к операнду
А, тоесть это для всех сочетаний таблица
источник

А

Алексей in Delphi & Lazarus
Igor
а так это всё тот же алгоритм деления столбиком
Ну, пока это не очень очевидно. Но уже хоть что-то понятно стало, однако, зачем бы дописываем 00ff не очень ясно
источник

I

Igor in Delphi & Lazarus
Алексей
А, тоесть это для всех сочетаний таблица
можешь и для 16-битных входов предвычислить, тогда алгоритм  будет есть по 2 байта данных
источник

А

Алексей in Delphi & Lazarus
Igor
можешь и для 16-битных входов предвычислить, тогда алгоритм  будет есть по 2 байта данных
А почему везде эти таблицы в 16 ричной системе хранятся?
источник

I

Igor in Delphi & Lazarus
Алексей
А почему везде эти таблицы в 16 ричной системе хранятся?
потому, что это удобно
источник

А

Алексей in Delphi & Lazarus
Алексей
Ну, пока это не очень очевидно. Но уже хоть что-то понятно стало, однако, зачем бы дописываем 00ff не очень ясно
Вот этот момент можешь, пожалуйста, пояснить?
источник

I

Igor in Delphi & Lazarus
Алексей
Вот этот момент можешь, пожалуйста, пояснить?
попробуй реализовать деление полиномов в столбик (без таблиц), в конце концов что-то похожее получится — сдвиги и xor
источник

А

Алексей in Delphi & Lazarus
Не, я вот про 00ff. Он для таблиц нужен?
источник

А

Алексей in Delphi & Lazarus
Он дописывается в функции апдейт
источник

DB

Dmitry Belkevich in Delphi & Lazarus
and $00FF - это младший байт из двух
источник