SORU
2 EKİM 2011, Pazar


Numarası.() işareti javascript

Eğer numarası (signum function) işareti bulmak için herhangi bir kolay yolu olup olmadığını merak ediyorum?
Daha kısa olabilir / daha hızlı bariz daha şık çözümleri/

var sign = number > 0 ? 1 : number < 0 ? -1 : 0;

Kısa bir alıntı

Bu kullanımı ve güvenli ve hızlı olacak

function sign(x) {
    return typeof x === 'number' ? x ? x < 0 ? -1 : 1 : x === x ? 0 : NaN : NaN;
}

Sonuçları

Şimdilik bu çözümleri var:


1.Açık ve hızlı

function sign(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }

1.1.kbec - bir tür daha koyun, daha fazla ölçülebilir, kısa gelen bir değişiklik[hızlı]

function sign(x) { return x ? x < 0 ? -1 : 1 : 0; }

dikkat:sign("0") -> 1


2.Zarif, kısa, çok hızlı değil[yavaş]

function sign(x) { return x && x / Math.abs(x); }

dikkat:sign( -Infinity) -> NaN, sign("0") -> NaN

JS Infinity gibi yasal bir numarası bu çözüm tamamen doğru görünmüyor.


3.Sanat... ama çok yavaş[yavaş]

function sign(x) { return (x > 0) - (x < 0); }

4.Bit-shift kullanarak
hızlı, ama sign(-Infinity) -> 0

function sign(x) { return (x >> 31)   (x > 0 ? 1 : 0); }

5.Tip-güvenli[megafast]

!Gibi gibi tarayıcıları (özellikle krom v8) biraz büyü iyileştirmeler ve bu çözüm çıkacak çok daha ölçülebilir ve daha başkaları, hatta daha (1.1) rağmen içerdiği 2 ekstra işlemler ve mantıksal olarak asla olamaz daha hızlı.

function sign(x) {
    return typeof x === 'number' ? x ? x < 0 ? -1 : 1 : x === x ? 0 : NaN : NaN;
}

Araçlar

  • jsperf performansın testleri;
  • fiddle - type-cast testleri;

Gelişmeler hoş geldiniz!


[Offtopic] Kabul cevabı

  • Andrey Tarantsov - 100 sanat için, ama ne yazık ki belli bir yaklaşımı daha yaklaşık 5 kat daha yavaş olur

  • Frédéric Hamidi - en upvoted bir şekilde cevap (zaman yazmak için) ve güzel bir şey, ama her şey olması gerektiği gibi kesinlikle değil, ımho. Aynı zamanda da Sonsuz sayı olan sayılar, biliyorsun doğru değil.

  • kbec - bariz çözüm bir gelişmedir. Devrimci değil, ama hep birlikte bu yaklaşım ben en dikkate alarak. Onu :) oy verin

CEVAP
31 Ocak 2012, Salı


Daha hızlı çözüm sürüm zarif:

var sign = number?number<0?-1:1:0

Saygılar

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • GoldgenieOfficial

    GoldgenieOff

    23 Temmuz 2009
  • The Slow Mo Guys

    The Slow Mo

    15 AĞUSTOS 2010