Как сократить 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, время: 06:55. |