Минус ноль в JavaScript
Я, конечно, знаю, что JavaScript хранит числа по стандарту IEEE 754, но всё больше
Но вот о существовании минус нуля я
Но, оказывается, в редких случаях отрицательный ноль может себя проявлять иначе, чем ноль положительный.
Как вы можете получить минус ноль? Например, просто написав
Похоже, что в реальном коде минус ноль может проявить себя в двух вещах: делении и операции atan2, именно так его и можно отличить от положительного нуля:
function isNegativeZero(x) {
return x === 0 && (1 / x) === -Infinity
}
function isNegativeZeroToo(x) {
return x === 0 && Math.atan2(x, x) < 0
}
Комментарии 60
Вы, похоже, из лиги «фотографов», а я считаю, что если вы не знаете язык, на котором программируете, то вы просто «купили флейту».
Намёк понятен?
Я не считаю себя сейчас хорошим программистом на JavaScript, появилось масса нового, о чём я представления пока не имею. Кроме того, есть детали, которые я мог пропустить. Я стараюсь чтобы такого не было, это ещё не значит, что мне одинаково хорошо удаётся это сделать в любом языке.
А если будете ещё троллить, я просто поудаляю ваши комментарии, включая эти. Мне одну кнопку нажать,
Да чего вы сразу обижаетесь?
Ну проводит Яндекс собеседования так, ваше право. Просто забавно, что вы вчерашний возможно не прошли бы собеседование у вас же сегодняшнего )
Да, и ещё.
Если вы
Мне кажется если уж и задавать такие вопросы, то было бы справедливо ставить плюс кандидату если он знает ответ, но не ставить минус, если не знает.
Комментарий для cru3l:
Я не люблю троллинг. Смирнов вонкак-то умеет в такие перепалки вступать, а мне кажется, что это напрасная трата сил и времени.
Яндекс большой. Почти 3 тысячи человек, как он только собеседования не проводит. Кстати, если человек не ответил накакой-то вопрос (и даже группу вопросов) это совершенно не значит, что я не возьму его на работу.
Если бы поступал на вакансию advanced javascript developer, то наверняка не поступил бы. Ещё бы я не поступил на C++ developer или, там, на вакансию маркетолога.
Я не работаю программистом JavaScript, более того, я вообще программистом не работаю, хоть и программирую иногда.
За последние две недели я написал на работе 4 строчки кода, около 10 строк конфига nginx и не сделал ни одного коммита.
Комментарий для cru3l:
На некоторых вопросах ровно так и происходит. Вопросы совершенно разные.
Например, я даю некоторые тесты, чтобы посмотреть как человек решает задачу. Я смотрю на сам процесс, мне совершенно неважно решит ли он задачу из такого теста.
cru3l не на пустом месте подковырнул. собеседования на вавансию программиста порой этим и достают, что хочется задающего вопросы послать подальше.
я сеячас делаю то что можно назвать RIA с испольщованием Jquery UI — но я вполне признаю что я не знаю 10% того что можно знать о JS и знаю 1% информации о Jquery UI. для базовой части приложения этого может хватить. не хватит — буду рыть документацию еще. Но если я буду рыть не по мере необходимости — а от и до — я в этом ЗАВЯЗНУ.
Потому я считаю неправильным задавать стопицот вопросов о определенных особенностях языка. сам из порой просто не помню — я помню куда посмотреть чтобы взять.
Правильный вариант проверки навыков — дать задачку работы с конструктциями языка при наличие документации.
например задачку создать в PHP класс, имитирующий при чтении большого файла(условие — не надеяться на память доступную скрипту) обращение к массиву(так чтобы foreach заработал ) — при полной документации по ООП решали единицы :)
Спасибо за разъяснения. Судя по всему, росказни о собеседованиях в Яндексе несколько преувеличены «фотографами»
Комментарий для анонимус:
Вы на Перле раньше не программировали, нет? :) Иначе откуда такое мнение, что нужно только писать на языке, а не читать его?
что-то написать.
почему-то не очевиден, то я отвечу: предпочту первого, потому что он будет быстрее работать.
С вами вместе работают другие люди, они участвуют в написании кода, иногда они «подхватывают» ваши куски, иногда вы им помогаете
В условиях, когда есть два программиста, один из которых бегло читает код, а второй лезет в словарь, чтобы посмотреть что будет, если написать typeof NaN, то как думаете, кого из них я возьму на работу?
Если ответ
Кстати, может быть я возьму на работу и второго, если для задач, которые будет решать человек на этой вакансии его знаний хватает.
Но платить ему будут меньше, конечно же.
Комментарий для анонимус:
Тут, конечно, нужно понимать, что это при прочих равных.
ну тут крайности…
javascript:alert(typeof(NaN) ); в строке браузера сказало что будет number :)
я typeof сам часто пользую
в том и проблема что чаще приходится решать задачу «на стыке». делать JSON отработчик на PHP и код на JS который с этим
Комментарий для анонимус:
Я не понимаю как можно читать код,что-то зазубрив. Как прочитать вот это, например (это JavaScript 1.8):
что-то, как мне это поможет?
где-то работает такой код, я хочу объяснить, не понимаю как зубрёжка может помочь читать сложный код.
(function (x) x(x))(function (z) function (y) z)(1)(2)(3)
Ну вызубрил я
Я, конечно, не хочу сказать, что у нас
Комментарий для анонимус:
То есть вы запустили этот код? Так ведь это часть стандарта IEEE 754, которому следует определённое количество языков (JavaScript, PL/SQL и так далее).
IEEE 754 — стандарт представления чисел. NaN — это число, согласно этому стандарту, а не потому что авторы JavaScript так захотели.
Комментарий для Евгения Степанищева:
я в курсе что такое NaN, более того, я физмат закончил и вполне представляю что есть +0 и -0 и откуда это идет.
Простой пример, относительно тех же типов данных.
http://docs.php.net/manual/en/function.gettype.php
Все довольно переменчиво. естькакие-то базисные вещи. кстати стандарты тоже со временем меняются.
Еще простой пример:
Сишные функцие работ со строками(strcmp, …) уже с C99 могут «понимать» кодировки в зависимости от текущей локали и не надо задействовать уникодовские функции. но так стало с определенного момента. а до этого было время когда со строками в другой кодировке приходилось писать сво библиотеку, да более того — грузить свой шрифт(я про времена засилия MS DOS
Комментарий для анонимус:
Полагаю, что у авторов JavaScript'а это конкретная константа, в то время как согласно IEEE 754 это целое множество значений, у которых значение порядка максимально и мантисса не равна нулю.
На чём основано ваше предположение.
Комментарий для анонимус:
Я ведь специально подчеркнул, что код подобный этому нигде не используется.
какую-нибудь array_change_key_case или уметь пользоваться array_multisort — важно.
Его недостаток — такое довольно сложно разобрать в голове (я смог со второй попытки, примерно, и пришлось напрячься), тем не менее, не исключено, что для будущих поколений программистов он будет простым.
Тем не менее, код попроще, где функции передаются как аргументы (возможно, аргументы сами себя) — нормальное явление в функциональном программировании и надо хорошо понимать, что это работает.
Кстати, вторая причина, по которой нужно хорошо знать язык — неизобретение велосипедов. В том же самом PHP туча функций в базовом языке, изобретать каждый раз
Дык присвойте переменной NaN — она будет иметь конкретное значение знака, мантиссы и порядка. Любопытно, конечно, посмотреть, как операции сравнения будут работать (с теми же inf и -inf, до кучи), но я в яваскриптах не силён.
NaN == NaN // false
NaN === NaN // false
a = NaN, a == a // false
Вообще я имел в виду сравнить при разных значениях мантиссы, но вполне допускаю, что это не имеет значения — если один из аргументов подходит под определение NaN — результат сравнения, видимо, false.
И, кстати, операций сравнения несколько больше, чем два.
Если NaN == NaN — false, то
NaN !=
NaN >
NaN <
?
NaN != Infinity // true
NaN != -Infinity // true
NaN < NaN // false
NaN < Infinity // false
NaN < -Infinity // false
NaN > NaN // false
NaN > Infinity // false
NaN > -Infinity // false
Программист, намеренно использующий в рабочем коде 5% языка, когда их можно заменить простыми конструкциями остальных 95% — тролль и груз для команды разработчиков, которые полезут
В данном случае я приверженец идеологии XP.
Embrace simplicity, Luke!
Учиться надо, а не беситься. Что вам мешает овладеть инструментом, которым вы пользуетесь каждый день? Сложно выделить один вечер и прочитать спецификацию?
А почему эти разработчики ленятся посмотреть в документацию?
Ещё один психолог по переписке? Вы были у меня на собеседовании?
Конечно нужно. Это не мелочи, а азы. И, конечно, сравнения в таком виде нет. Естькакое-то var1 == var2, где в какой-то переменной может быть NaN.
что-то вроде if (var1 == NaN), что является уже ошибкой.
Кроме того, если не знать этой особенности, легко накодить
Надо шире думать. Не с позиции себя, а команды. У тебя проект, над которым работало и будет работать 10 человек. Они будут приходить и уходить. Искатьгуру-девелоперов проблематично и дорого, поэтому писать так, чтобы было понятно сферическому программисту выгоднее в перспективе.
Да никто не ленится. Просто никакая группа людей не покроет знания друг друга на 100%. Намеренно извращать код, делая его «изысканным» но сложным для восприятия/чтения — вот где зло.
Комментарий для gogis:
У нас текучка низкая. По крайней мере, в моей команде. Много проектов на поддержку (мы используем и готовые чужие проекты), так что важно уметь читать код.
Комментарий для Евгения Степанищева:
Интересно, а -0 меньше 0? :)
Комментарий для gogis:
намеренно? oh really? я просто признаю что пользую не больше 10% быдлопохапе в работе. но кто знает может остальные 90% мне в данный момент в данном модуле прост не нужны? :)
Например DOM, абстрактные классы php5, куча всяких поездатых плюшек.
Вы что так уверены что они везде нужны?
таки стоит признать что в узких задачках пользуетс маленький процент объема знаний. это не значит что я не знаю про все остальное. просто зачем пихать то что не нужно туда где оно не нужно?
я это время от вреиени делаю. таки да!
код должен быть максимально понятен. желательно чтобы даже для дебила.
а то сам откроешь свой код 10летней давности и срешь кирпичами — непонятно ни%уя
вбей простенький скрипт и посмотри. не сцы винт оно не форматнет. :)
Вне контекста я бы не подумал, что речь идет о возможностях языка. Большинство сложностей восприятия возникаетиз-за плохой стркутуры кода и плохого проектирования продукта. Если дело только в особенностях языка, то у разработчика не должно составить труда разобраться в них, заодно научившись чему-то новому.
Комментарий для SiMM:
Они равны.
Комментарий для Евгения Степанищева:
а… Так ты сисадмин. Всё понятно.
Комментарий для Евгения Степанищева:
запускал, проверял? ))))
Signed zero -- это ведь не только -0, но и +0. Такой в JS есть?
Комментарий для анонимус:
Зачем запускать?Во-первых, есть спецификация (на ссылке в моей заметке), во-вторых, если бы они не были равны, это породило бы странные эффекты в языке, которые были бы заметны.
Кстати, считаю, что ignore_user_abort вредна, как goto — создаёт ложное чуство защищённости, и позволяет считать безопасным написание двух зависимых действий без транзакции. Мол, всё равно ж выполнение скрипта не прервётся… Хотя сама функция поступает ровно так, как она называется.
Так что вопрос про нули хороший для любого собеседования.
да кто вам такое сказал? :)
что-то долгое через веб, не дожидаясь ответа. вопрос удобства :)
или max_execution_time у вас в ноль стоит и вы моете себе такое позволить? :)
ignore_user_abort иногда нужна. например если не хочется периодические задачи запускать по крону или хочется запустить
Я не анонимус, но не считаю. Например, такой пример прекрасно прерывается по Ctrl+C:
Эх, каменты в блогах — не группы новостей в старом добром Netscape communicator. Может, если уж комментаторы зарегистрированы, давать возможность посмотреть последние каменты по клику на аватарке?
Вообще, а зачем видеть комменты
Комментарий для jankkhvej.blogspot.com:
lolwhat?что-то там запустить и тд — допускаю.
я то как раз так не считаю.
НО. для одминских задач —
а когда такое на массово дергаемом юзерами скрипте — тадада — программера надо вешать.
В консоли. А на вебсервере если юзер дернул его и прервал чтение данных он будет работать. ну или если время взаимодействия истекло.что-то большое надо запустить — запустить скрипт на вебсервере и «забыть» — тут ниче плохого нет.
Евгений, я для частных ситуаций обработки данных если разово
А вот если такой скрипт все подряд дергают — такое делать низя.
в общем все зависит от предусловий. (с) Пастер
Комментарий для анонимус:
Выкакую-то одну цитату выдернули. Почему? Я там ещё несколько случаев привёл.
И, честно сказать, я не
ну…. смотря как писать :)
например есть задача — раз в час обновлять кейворды из свежеобновленных статей пропущенные через стеммер портера(нужно было для написания автодополнения шустрого). можно запускать в кроне. можно запустить руками через веб и там такая штука будет нужна.
Некоторые любят скрипты такой пакетной обработки запускать не в консоли или через крон а со стороны вебсервера. там такая штука имеет смысл(max_execution_time в 0 + ignore_user_abort в true).
сожрет скрипт память или нет — понятно от кого зависит :)
я про задачки из разряда «однообразно перелопатить кучу данных». там это может иметь смысл.
риск что за это время
Комментарий для Евгения Степанищева:
http://4.bp.blogspot.com/_DoMs4zc6wuI/TALg …00-281.jpg
Ну, чтобы видеть контекст — сколько в каком топике и чего этот комментатор накомментил.
Я очень долго занимался и программированием тоже. Сейчас это хобби, на работе программировать времени не хватает.
То есть чтобы понять не тролль ли это или что? Я просто пытаюсь задачу представить, ведь от этого решение зависит.
Чтобы хоть так вот примерно было — https://groups.google.com/forum/#%21activi … HPUyOI2nYJ
Хм…