SORU
7 AĞUSTOS 2014, PERŞEMBE


Neden JavaScript iki farklı sayılar eşit mi?

Etrafında bir JavaScript birden bunu denemek için karar verdi zaman konsol ile uğraşıyordum:

0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 == 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Şaşırtıcı bir şekilde, eşit ediyorlar: Strange output

Bunlar neden oluyor? Açıkça farklı sayıda (hatta 0xFFFF...FFFF bir basamak daha kısadır

Eğer 0xFFFF...FF F eklersem artık eşit değil. 0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 == 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Even stranger output

Bu davranışı bekleniyor?

CEVAP
7 AĞUSTOS 2014, PERŞEMBE


JavaScript tüm dahili numaraları 64-bit floating point numbers tarafından temsil edilen (şartname §4.3.19). Aynen 0 her tamsayı 9007199254740992 (hex değeri 0x20000000000000) temsil anlamına gelir. Herhangi bir tamsayı daha büyük (negatif muadili veya daha az), en yakın yaklaşık değere yuvarlanır gerekebilir.

İnceleyin:

9007199254740992 === 9007199254740993
> true

Ancak, yeterince farklı yaklaşık değerleri yuvarlanır iki sayıdan onları karşılaştırdığımızda farklı değerleri değerlendirir. Örneğin:

9007199254740992 === 9007199254740994
> false

Bu F başka bir sayı eklediğiniz ikinci parçasında gördüğünüz şey.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dylan Dubay

    Dylan Dubay

    10 Temmuz 2013
  • Phymec

    Phymec

    18 Temmuz 2009
  • SPBedition

    SPBedition

    24 HAZİRAN 2013