Как стать автором
Обновить

Комментарии 40

НЛО прилетело и опубликовало эту надпись здесь
Похоже на типичную ошибку работы с памятью (в самом плеере). Отсутствие и наличие оптимизации влияет на то проявляется баг или нет. Интересно, они в этом самом адобе вообще верификационными тулами пользуются или где?
Глупый вопрос, но… зачем делить на ноль?
А зачем вообще нужны значения Number.POSITIVE_INFINITY и Number.NEGATIVE_INFINITY?
Предположим там будет переменная. Она может быть 1238 а может и 0.
А проверять значение переменной на ноль?
Дак да. Нормально. И ошибка бы не вылезла. Думаю суть поста не в этом, а в прецеденте различной работы дебаговой версии и обычной.
Не ошибается тот, кто ничего не делает. Посмотрим насколько быстро Adobe поправит. Могу представить каково быть бета-тестером flash-плеера. Забавный баг.
По опыту предыдущих багрепортов — не скоро
А представьте если этот баг окажется «последней каплей» и кто-нибудь скажет: «Хорош Петрович! Пора всё отдавать в opensource!». Да, я пересмотрел порно и фантазия разыгралась.
Есть такие ошибки, которые отлично ловятся стандартными способами (valgrind тот же), но не все их используют.
Есть, конечно, смешной фикс: if (1/Math.abs(0) == Number.NEGATIVE_INFINITY) но это кхм
Ну или да, логичный фикс — проверять на 0
Math abs возвращает Number который IEEE-754 double-precision floating-point number. Он имеет двойственное представление 0: +0 и -0. Ядумаю что деление единицы на него значения в данном примере не имеет. Скорее всего тут именно Math.abs(0) получается -0. Можете проверить, я только попозже доберусь до проверки.
Math.abs(0) == 0 выдает true
Rounds the value of the parameter val up or down to the nearest integer and returns the value. If val is equidistant from its two nearest integers (that is, if the number ends in .5), the value is rounded up to the next higher integer.
link
Тут вообще читать надо очень подробно ещё что-нибудь. Ибо оба представления нуля в дабле на самом деле одно и тоже. И по данному описанию строго не понятно что round обязан сохранить знак нуля.
Простите, а при чем тут round?
блин
Спутал что-то в процессе. Абс тоже возвращает намбер. Дома потещу. Но кстати с раундом тоже интересный вопрос.
как временная замена
1 / Math.abs( Math.abs(0) ) == Infinity
Делить на ноль и ожидать определенного результата? :)
Дак. В стандарте есть Number.POSITIVE_INFINITY и Number.NEGATIVE_INFINITY
Они что, изобрели новую математику?
Стандарт IEEE-754
«Operations with infinite values are well defined in IEEE floating point.»
Да, вы правы, но все-таки
Because of the improper algebraic results of assigning any value to division by zero, many computer programming languages (including those used by calculators) explicitly forbid the execution of the operation and may prematurely halt a program that attempts it, sometimes reporting a «Divide by zero» error.
Но в данном случае все определено четко
Прогуливали матан? :)
Объясните, а?
есть математические абстракции:
0, 
∞, 
+∞=∞, 
-∞
1/0=∞
-1/0=-∞
1*0=0
1*∞=∞
-1*∞=-∞
1*(-∞)=-∞
-1*(-∞)=∞
0*0=0 (???)
∞*0=нельзя
0/0=0 (???)
∞/∞=нельзя
∞*∞=∞ (???)
Abs(0)=0
Abs(∞)=∞
Abs(-∞)=∞

есть их «компьютерные» реализации:
почти 0 (любое число от -0(=0-сигма) до +0(=0+сигма), здесь сигма=очень маленькое вещественное число, на которое процессору начхать, так как он его не может обработать в силу его маленькости), 
+∞ (такая специальная хернюшка в памяти, у которой есть знак-атрибут +)
-∞ (тоже самое у которой знак-атрибут -)

как видим, хромает реализация у 0:
любое число от -сигма до 0 это -0, от 0 до +сигма = +0

То есть ко всем тем правилам что есть в математике были добавлены
1/-0=-∞
-1*0=-0
-1*(-0)=+0
(-0)*(-0)=+0
-1/-0=+∞
ну так далее в том же духе, с разными комбинациями

ну и естественно, так как 0 уже не 0, а какое-то число, то

Abs(0)=0
Abs(-0)=+0

То есть Adobe профукал реализацию вот этой самой последней функций, у них получилось
Abs(-0)=-0
или возможно вовсе, что еще хуже,
Abs(0)=-0
И отсюда уже следует, что предлагаемая заплатка Abs(Abs(0)) может не помочь.
вики говорит, что x/0 = undefined, да и в школе так учили. кому верить?
Это лишь вопрос точности. Если нас интересует точное значение, то ты прав.
В мире программирования точность всегда ограничена. Поэтому 0 может быть не точно ноль. А бесконечность начинаться со вполне конкретного числа.
Суть не совсем в этом. Проблема в том, что дебаг и не дебаг плееры выдают разный результат.
Читай: в некоторых скриптах автор делит на ноль и ожидает от этого определенного результата. Кошмар.
В стандарте четко определено, что результат будет Infinity.
Значит, стандарт составляли молодцы, которые оставили программисту возможность делить на ноль.
Ну, да — и что? Если результат стандартом четко определён?
Представьте себе, математика арифметикой не ограничиваеся
Mixailo, речь идёт не о математике, а об информатике. Видимо, вы не знакомы со вторым, отсюда и вопросы.
Я выше писал, цитирую:
Это лишь вопрос точности. Если нас интересует точное значение, то ты прав.
В мире программирования точность всегда ограничена. Поэтому 0 может быть не точно ноль. А бесконечность начинаться со вполне конкретного числа.
А еще шрифты стали немного по-другому отображаться, будте внимательны. Это связано с изменениями рендера.
А еще на MacOS он у многих падает, если установлены какие-нибудь 3rd party шрифты, поэтому если плеер валится во всех браузерах, то читаем эту тему forums.adobe.com/message/3986674
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории