Татарин>>Децимал-то с бесконечной точностью, как и полагается нормальному скрипту, чем не угодил?
Zenitchik> Всем. Вы реально хотите странного. IEEE-754 - единственный нормальный формат. Остальное - ересь.
Это религиозное?
Так чем "всем"-то децимал может быть хуже? Кроме скорости вычислений с вещественными числами (которая яваскрипту пофигу в силу скриптовости, да и дабл можно было прицепить отдельным типом, как прицепили инт64)?
Чем для скриптового языка, где есть неявная конверсия строки в число и обратно лучше децимал могу объяснить. Преимуществ много (выше пример с конверсией в тип ограниченной точности нагляден). А вот чем децимал тут хуже?
Татарин>> Но с чего бы ожидать невозможности или неверности оператора над вещественными числами
Zenitchik> С того, что остаток от деления дробных чисел - не рассматривается в математике.
Тогда почему он рассматривается в ЯС?
...
От языка программирования требуется одно - лёгкость и точность выражения мысли программиста. Да, есть случаи, когда выражаемые концепции или особенности низкоуровневой реализации заставляют делать сложности и выверты, которые потом описывать в спеках. И да, программист к этому должен быть всегда готов.
Но создавать такие выверты на ровном мместе - это либо дурь, либо упущение, которое суть та же дурь.
У нас скриптовый язык, создаваемый с нуля, причём синтаксис взят почти полностью у широко распространённых семейств языков именно с целью обеспечить мгновенный перпеход и лёгкое применение без чтения спек. Никаких практически значимых ограничений у создателя языка не было, это скрипт без всякого легаси.
Ну так какого фига-то?
С какого фига и как в голову залетела вообще мысль применять % к вещественным, а если она залетела (ладно, можно оправдать, почему бы и не расширить), то почему не реализовать оператор нормально? что помешало?
А теперь это поведение тянется из соображений совместимости.
...
Или вот регуляры (которые вообще созданы задолго до яваскрипта, и полная спека по которым давно написана).
var a = /a/g;
ОК?
a.test('ab');
a.test('ab');
и ещё раз, чтобы совсем понятно было:
a.test('ab');
Что выдаст в первом, во втором и третьем случае?
Блин, я понимаю, как так получилось, но вопрос-то иной: ЗАЧЕМ? ну зачем оно так получилось-то? Подумать нельзя было, что ли?