ermouth: (ang)
ermouth ([personal profile] ermouth) wrote2017-03-21 10:51 pm
Entry tags:

1280÷7

Начал тестировать одну софтинку на всяком старье – и сразу словил гемор, вестимо из IE, хоть и не слишком старого, 11 версии.

В CSS3 можно задавать размеры элементов, используя выражения типа width:(100% / 7) или width:(50% - 10px +1em) – то-есть сочетать разные единицы измерения в одном выражении. Исключительно удобая штука, хотя и дорогая в плане CPU и перерисовки.

Так вот, по мнению IE11, если поставить рядом 7 элементов с шириной calc(100% / 7), они в ряд почти всегда не помещаются, если эти 100% в пикселях на 7 нацело не делятся. При этом айтемы с шириной calc((100% - 0.01px) / 7) помещаются всегда.

То-есть второй факт однозначно свидетельствует, что внутренние расчёты всё таки subpixel-точности (как и требует стандарт). Вот только первый факт свидетельствует о том, что fp-арифметика там внутри скорее всего не IEEE-754, либо она хуже по точности, чем binary32.

Любопытно, что с обычной 64-битной fp-точностью все вычисления n/7*7 для целых n из нужного мне интервала [1250,1280] возвращают n точно. То-есть это роботы в IE team сидели и специально придумывали какую-нибудь недооптимизацию своей тормозной поделки, ну и по пути напакостили.

Типичное, впрочем, явление вообще для всего софта Microsoft, что я видел. 

[identity profile] tonsky.livejournal.com 2017-03-22 07:23 am (UTC)(link)
Блин, учитывая, что там только умножение и деление, они могли бы вообще все расчеты точно в рациональных числах делать. И проблем бы не было

[identity profile] ermouth.livejournal.com 2017-03-22 07:38 am (UTC)(link)
Не дай боже, багов было бы многократно больше ) Я вообще не понимаю, зачем выделываться, если есть IEEE 754.

Потом, есть же поворот – и он не обязательно всегда будет на угол с рациональным тангенсом.