Как сократить x > 0 ? 1 : (x < 0 ? -1 : 0)
В F# есть для этого функция Math.sign(x).
Функция должна работать так: function sign(x) { if (x > 0) return +1; if (x < 0) return -1; return 0; } |
danik.js, можно так :)
function sign(x) { return x/Math.abs(x)|0; } Или так: function sign(x) { return x < 0 ? -1 : +!!x; } |
function sign(x){ return x && ( x >> 31 ) * 2 + 1 } |
магийа)
|
tenshi, почему не return x && ( x >> 31 || 1 )? Разве нельзя обойтись без арифметических операций?
|
Вариант с Math.abs отличный. А зачем там |0 ?
|
Одного не понимаю - зачем???
|
Riim, что зачем?
На входе получаем некое число, положительное, 0 или отрицательное, на выходе нужно иметь +1, 0 или -1 |
Хотя вроде бы мне это действительно не нужно )
Я мучаюсь с событием WheelEvent. Мне нужно кроссбраузерно получать значение дельт при прокрутке. |
Цитата:
|
var x =2000000 x = parseInt(2*x/(Math.abs(x)+0.00001)); alert(x) |
Цитата:
Пример без |0 function sign(x) { return x/Math.abs(x) ; } alert(sign(0)) ; |
Вспоминаем математику. Знаком + является и число 0. Так же оно и является отрицательным. Но в математике это опускают. Так что
sign = x<0 ? -1:1; |
Цитата:
Вот так для понятности: Math.sign = function(x) { return x / abs(x) || 0; } |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
консоли всё равно вроде
0===-0 //true |
Цитата:
Отличить от +0 можно так: 0 === -0;// true 1/0 === 1/-0;// false В es6 будет Object.is (по сути вот это http://es5.javascript.ru/x9.html#x9.12), который так же будет их различать: Object.is(0, -0);// false |
дык при делении на 0 бесконечность будет а не 0
а у бесконечности да, есть знак |
Я вот чего понять не могу - зачем изобретать свою математику?
|
tenshi,
а кто ее изобретает? |
Инженера, что придумали отрицательный ноль и бесконечность как частное от деления на ноль
|
Math.sign = function (n) { if (n < 0) return -1; if (n > 0) return 1; return 0; }; Условием получается быстрее чем через объект Math. http://jsperf.com/math-sign |
Цитата:
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 19:41. |