SORU
13 Kasım 2013, ÇARŞAMBA


Neden Matematik.pow(0, 0) === 1?

Biz 00olduğu belirsiz.

Ama,javascriptdiyor ki:

Math.pow(0, 0) === 1 // true

veCaynı şeyi söylüyor:

pow(0, 0) == 1 // true

NEDEN?

Biliyorum:

>Math.pow(0.001, 0.001)
0.9931160484209338

Ama neden Math.pow(0, 0) herhangi bir hata atıyor? Ya da belki de bir NaN 1 daha iyi olurdu.

CEVAP
13 Kasım 2013, ÇARŞAMBA


CThe result of pow(0, 0)sonuç temelde uygulama tanımlı davranış beri matematiksel olarak var çelişkili bir durum olduğu N^0 her zaman 1 0^N her zaman 0 N > 0, Bu yüzden size gereken herhangi bir beklenti matematiksel olarak sonuç bu ya. Wolfram Alpha forum bu mesajlar biraz daha detaya gider.

pow(0,0) 1 neden sahip olsa da bölümü kapsayan Rationale for International Standard—Programming Languages—C Birleşik Devletleri gibi birçok uygulama için yararlıdırIEC 60559-kayan nokta aritmetiğidestek:

Genel olarak, C99 sayısal bir değer yararlı olduğu NaN sonuç kaçınır. [...] Pow sonuçları (I. g,0) ve pow(0,0) bu tanım kullanabilen uygulama olduğundan 1, Her ikisi de. Örneğin, x(p) ve y(p) herhangi bir analitik fonksiyonlar bu hale zero p = a, pow(x,y) eşittir exp(y*log(x)), yaklaşımlar 1 p yaklaşır.

Güncelleştirme C

Leemes doğru olarak belirttiği gibi aslında başvuru için bağlıkarmaşıkversiyonupownon-complex süre versiyonu olduğunu iddia ediyoretki alanı hatadraft C standard draft C standard ve her ikisi de düşerC99veC117.12.7.4 bölümündePow işlevleriparagraf2(söylüyorvurgu benim):

[...]Etki alanı bir hataoluşabilireğer x sıfır ve y sıfır olur.[...]

söyleyebileceğim kadarıyla bu davranış unspecified behavior biraz Dolambaçlı geri döndü demek bölüm 7.12.1Hata koşulları tedavidiyor ki:

[...]bir etki alanı hata varsa giriş bağımsız değişken etki alanı içinde ve dışında oluşur matematiksel fonksiyon tanımlanır.[...] Bir etki alanı hata, işlev uygulama-tanımlı tamsayı ifade math_errhandling & MATH_ERRNO sıfır değeri, tamsayı ifadesi hata bir EDOM değer kazanır; [...]

Eğer bir olsaydıetki alanı hatasonra da bu olurduuygulama davranışı tanımlanmışama gcc en son sürüm clang errno değeri bir değildir 0etki alanı hatabu Derleyiciler için.

Javascript Güncelleştirin

İçinJavascriptbölüm ECMAScript® Language Specification 15.8Matematik Nesne15.8.2.13 altındapow (x, y)diğer şartlar arasında diyor ki:

Y 0 ise, sonuç ise x NaN bile 1.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chrmoe

    chrmoe

    7 Kasım 2006
  • williamfitzsimmons

    williamfitzs

    14 Mart 2008
  • xdadevelopers

    xdadeveloper

    25 Aralık 2009