Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сократить x > 0 ? 1 : (x < 0 ? -1 : 0) (https://javascript.ru/forum/misc/41037-kak-sokratit-x-0-1-x-0-1-0-a.html)

Deff 30.08.2013 10:28

var x =2000000
x = parseInt(2*x/(Math.abs(x)+0.00001));
alert(x)

КЛ@ВИШ_nick 30.08.2013 11:58

Цитата:

Сообщение от danik.js
Вариант с Math.abs отличный. А зачем там |0 ?

Что будет при делении на 0?
Пример без |0
function sign(x) {
    return x/Math.abs(x) ;
}
alert(sign(0)) ;

PeaceCoder 30.08.2013 12:39

Вспоминаем математику. Знаком + является и число 0. Так же оно и является отрицательным. Но в математике это опускают. Так что
sign = x<0 ? -1:1;

ruslan_mart 30.08.2013 13:33

Цитата:

Сообщение от danik.js
А зачем там |0 ?

Ну там просто когда делишь 0 на abs(0), то получается NaN, поэтому так написал. :)

Вот так для понятности:

Math.sign = function(x) {
   return x / abs(x) || 0;
}

Riim 30.08.2013 13:42

Цитата:

Сообщение от PeaceCoder
Знаком + является и число 0. Так же оно и является отрицательным.

в js есть отрицательный 0.
Цитата:

Сообщение от PeaceCoder
sign = x<0 ? -1:1;

здесь он не учтен.

danik.js 30.08.2013 16:22

Цитата:

Сообщение от КЛ@ВИШ_nick
Пример без |0

Блин, точно. Самооценка -= 100500

Цитата:

Сообщение от Riim
в js есть отрицательный 0.

И как он выглядит?

animhotep 30.08.2013 16:50

консоли всё равно вроде
0===-0 //true

Riim 30.08.2013 17:23

Цитата:

Сообщение от danik.js
И как он выглядит?

большинство операций приводят его к +0.
Отличить от +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

animhotep 30.08.2013 17:41

дык при делении на 0 бесконечность будет а не 0
а у бесконечности да, есть знак

tenshi 01.09.2013 13:29

Я вот чего понять не могу - зачем изобретать свою математику?


Часовой пояс GMT +3, время: 00:39.