У меня такое ощущение, что то, что вы хотите, может быть возможно с помощью чего-то вроде кодов серого .если бы вы могли перевести свои значения в серые коды и использовать какую-то контрольную сумму, которая могла бы исправить n битов, вы могли бы определить, были ли эти два массива одинаковыми, за исключением n-1 битов ошибок, верно?(каждый бит ошибки означает, что число «отклоняется на единицу», где отображение было бы таким, чтобы это было изменение в младшей значащей цифре).
, но точные детали за мной - особенно для плавающегозначения точек.
Я не знаю, помогает ли это, но то, что решают серые коды, - это проблема патологического округления.округление звучит так, как будто это решит проблему - наивное решение может округлить, а затем - контрольную суммуно простое округление всегда имеет патологические случаи - например, если мы используем слово floor, то 0.9999999 и 1 различны.Подход с использованием серого кода, по-видимому, решает эту проблему, поскольку соседние значения всегда находятся на расстоянии одного бита, поэтому контрольная сумма на основе битов будет точно отражать «расстояние».
[update:] более точно, что вы хотите, это контрольная суммаэто дает оценку расстояния Хэмминга между вашими закодированными в серый цвет последовательностями (и закодированной в серый цвет частью легко, если вы просто заботитесь о 0,0001, поскольку вы можете умножить все на 10000 и использовать целые числа).
и кажется, что такие контрольные суммы существуют : Любой код, исправляющий ошибки, может использоваться для обнаружения ошибок.Код с минимальным расстоянием Хэмминга, d, может обнаруживать до d - 1 ошибок в кодовом слове.Использование кодов, исправляющих ошибки на основе минимального расстояния, для обнаружения ошибок может быть целесообразным, если требуется строгое ограничение на минимальное количество обнаруживаемых ошибок.
, поэтому на всякий случай неясно:
- кратное минимальной ошибке для получения целых чисел
- преобразование в эквивалент кода Грея
- использование кода обнаружения ошибок с минимальным расстоянием Хэмминга, превышающим допустимую ошибку.
но я все еще не уверен, что это правильно.Вы все еще получаете патологическое округление при преобразовании из числа с плавающей точкой в целое число.поэтому кажется, что вам нужно минимальное расстояние Хэмминга, равное 1 + len (данные) (наихудший случай, с ошибкой округления для каждого значения).это возможно?вероятно, не для больших массивов.
может быть, спросить еще раз с лучшими тегами / описанием теперь, когда возможно общее направление?или просто добавить теги сейчас?нам нужен кто-то, кто делает это для жизни.[я добавил пару тегов]