avva: (Default)
[personal profile] avva
Если вы вдруг еще не знаете, то в Excel 2007 обнаружился смешной баг: если умножить, например, 77.1*850, то вместо правильного ответа 65535 Excel напишет 100,000 (сто тысяч). Он при этом сохраняет у себя в памяти правильный ответ, и если, например, его далее умножить на 2, то правильно покажет 131070, а не 200000. Но показывает он неправильно - причем только результаты некоторых операций, которые по идее должны быть равны 65535 или 65536, и только этим двум числам.

Более подробный анализ показал, что на самом деле суть в том, что ошибка происходит при выводе на показ одного из 12 чисел, чрезвычайно близких к 65535 или 65536, но не равных им в точности - например, 65534.99999999995. При умножении, скажем, 77.1*850 в ответе получается не в точности 65535, а одно из этих чисел, из-за неточностей, присущих операциям с плавающей точкой.

Но вот что интересно. Об этом баге отписались уже все кто мог. И сам Майкрософт, и сайты технологических новостей, и вся компьютерная блогосфера, начиная с самого популярного среди программистов блоггера Джоэля. Корпоративный блог Wolfram использовал этот случай, чтобы пропиарить Mathematica. Итд. итп.

И при этом ни у кого нет ни малейшего понятия о том, как этот баг мог случиться (ну, кроме программистов Excel в Майкрософте, а они не признаются).

Как полагается любым компетентным хакерам, мы сразу узнаем 65535 - это 2^16-1. Сразу становится ясно, что это наверняка что-то связанное с неправильной интерпретацией битового значения числа с плавающей точкой. Но вот загвоздка! когда действительно смотришь на эти битовые значения, то ничто подобное не вырисовывается. Никак не получается понять, что такого можно неправильно сделать с теми 12 числами, чтобы воспринять их как 100,000 или 100,001.

Должен признаться, что меня это смешит. Джоэль, и десятки других блоггеров вслед за ним, с умным лицом рассказывают читателям об операциях с плавающей точкой, о представлении чисел в этом формате, о неизбежных погрешностях, о сложностях... а объяснить, как такой баг мог бы возникнуть, совершенно не могут - и тогда становится неясно, какое вообще отношение к этой истории имеют эти объяснения и ликбезы. Может, дело вовсе не в плавающей точке. Единственная версия, которая у меня есть - и это даже версией назвать нельзя: этот баг демонстрирует, что Excel работает с числами как-то исключительно странно и извращенно, возможно, через несколько слоев плохопонятых и неадекватных библиотек, и где-то в иерархии никому до конца не понятных классов происходит какой-то глупый сбой, суть которого не имеет даже и смысле предполагать, потому что она скорее всего навязана этой глупой иерархией, а не какой-то "красивой и простой" причиной вроде неправильной интерпретации битов.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

February 2026

S M T W T F S
1 2 3 4 5 67
8 9 10111213 14
15 16 17 18192021
2223 2425262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 24th, 2026 02:08 pm
Powered by Dreamwidth Studios