Обнаружили 20-летнюю опечатку в коде System.Random в .NET
В стандартной библиотеке .NET, отвечающей за генерацию случайных чисел, найдена опечатка, которая присутствовала в коде более двух десятилетий.
Специалисты обнаружили, что в коде метода System.Random вместо ожидаемого значения 31 было указано 21. Эта ошибка не привела к критическим сбоям, но изменила ожидаемое поведение генератора случайных чисел, сделав его менее равномерным, чем могло быть.
Разработчики приняли решение не исправлять опечатку напрямую, чтобы избежать нарушения обратной совместимости. Коррекция этого параметра может привести к изменению последовательностей чисел, генерируемых методом new Random(42), что повлияет на работу существующего программного обеспечения, полагающегося на текущий алгоритм.
Также выявлено, что методы new Random() и new Random(42) функционируют как совершенно разные генераторы. Разница в качестве генерации случайных чисел между ними может достигать десятикратного размера в зависимости от используемого метода.
Это открытие имеет значение для проектов, где критически важна равномерность распределения случайных чисел, например, в статистических моделях, криптографии или играх. Разработчикам рекомендуется учитывать эти особенности при работе с System.Random.
Часто задаваемые вопросы
Что за опечатку нашли в System.Random?
В исходном коде метода System.Random в .NET вместо числа 31 ошибочно было указано 21, что влияло на внутренний алгоритм генерации случайных чисел.
Почему эту опечатку не стали исправлять?
Опечатку решили оставить, чтобы не нарушать обратную совместимость. Изменение алгоритма могло бы поменять последовательности чисел для уже существующего программного обеспечения, которое полагается на текущее поведение System.Random.
Есть ли разница между new Random() и new Random(42)?
Да, new Random() и new Random(42) работают как разные генераторы. Это приводит к существенным различиям в качестве генерации случайных чисел, вплоть до десятикратного изменения на некоторых методах.
На что влияет эта опечатка для разработчиков?
Разработчикам стоит учитывать эту особенность System.Random, особенно в проектах, где критически важна равномерность распределения случайных чисел, например, в статистических расчётах, криптографии или игровых механиках.
Источник: Habr · Rusability ИИ


Комментарии (0)
Без регистрации. Комментарии проверяются автоматически перед публикацией.
Пока нет комментариев. Будьте первым!