и посмотреть медиа
Code on a Napkin - Python coding
и посмотреть медиа
Channel about programming in Python and other languages. Simple explanations and codes.
Channel about programming in Python and other languages. Simple explanations and codes.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Resource for those interested in programming. Focus on Python, but covers other topics as well. Simple examples and breakdowns.
Знаете ли вы, что float('nan') != float('nan') – True? NaN не равен самому себе – и во всех языках, реализующих IEEE 754, это работает одинаково. В Python, JavaScript, C, Rust, Go – это не особенность реализации, а стандарт. И есть у этого конкретная причина. nan = float('nan') print(nan == nan) # False print(nan != nan) # True print(nan > 0) # False print(nan < 0) # False print(nan == 0) # False NaN не больше нуля, не меньше нуля и не равен нулю. Он не равен ничему – включая себя. Уильям Кахан, архитектор IEEE 754, сделал это намеренно. Логика была такая: NaN – это результат операции без определенного ответа. 0/0, sqrt(-1), inf - inf – это все разные операции, и нет оснований считать, что их результаты совпадают; два неизвестных не обязаны быть равными. Если бы NaN == NaN было True, то пришлось бы признать, что все неопределенности одинаковы, а это математически неверно. У этого решения есть практическое следствие: NaN можно обнаружить через сравнение с самим собой. Именно так и задумывалось – до math.isnan это был идиоматичный способ: import math x = float('nan') print(x != x) # True – работает благодаря тому же свойству print(math.isnan(x)) # True – правильный способ в современном коде А вот list при проверке вхождения сначала сравнивает объекты через is, и только потом через == – поэтому один и тот же nan находит себя в списке, а другой – нет: a = float('nan') b = float('nan') print(a in [a]) # True – тот же объект, is -> True, == не проверяется print(a in [b]) # False – разные объекты, == -> False NaN также портит сортировку: sorted([1, float('nan'), 2]) выполнится без ошибки, результат может зависеть от исходного расположения данных, потому что алгоритм сортировки предполагает транзитивность сравнений, которой у NaN нет. Кахан получил премию Тьюринга в 1989 году – в том числе за IEEE 754. Стандарт вышел в 1985-м и впервые унифицировал floating point на всем железе: до этого каждый производитель реализовывал свой формат, и один и тот же код давал разные результаты на разных машинах. Код на салфетке x Кусочки кода
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!