SORU
30 Ocak 2014, PERŞEMBE


() pow biri tarafından burada gibi görünüyor

Neler oluyor burada:

#include <stdio.h>
#include <math.h>
int main(void) {
    printf("17^12 = %lf\n", pow(17, 12));
    printf("17^13 = %lf\n", pow(17, 13));
    printf("17^14 = %lf\n", pow(17, 14));
}

Bu çıktıyı alıyorum:

17^12 = 582622237229761.000000
17^13 = 9904578032905936.000000
17^14 = 168377826559400928.000000

13 ve 14 wolfram alpa cf ile eşleşmiyor:

12: 582622237229761.000000
    582622237229761

13: 9904578032905936.000000
    9904578032905937

14: 168377826559400928.000000
    168377826559400929

Ayrıca, bazı garip kısmı tarafından yanlış değil. - tam bir yanlış!

Eğer bu iş bana düştü pow() benim için ne yapabilir sınırına ulaşır ise, bu hesaplanabilir bir alternatif var mı? x^y Her zaman daha az ULLONG_MAX bulunduğu x^y, hesaplayan bir fonksiyon ihtiyacım var.

CEVAP
30 Ocak 2014, PERŞEMBE


pow double sayılar ile çalışır. Bu 53 bit bir tamsayı burada s * 2^e-s formunu sayıları temsil eder. Bu nedenle double 2^53, ama sadece altındaki tüm tamsayıları saklayabilirbazı2^53 yukarıda tamsayılar. Özellikle, tek çift sayılar ^ temsil edebilir . Beri e^2 ^ 53,. 0 değeri her zaman 2 katı.

17^13 e 1 olarak ayarlanır ve bu nedenle hesaplanan değer sayı olur öyle olsa bile tam olarak temsil etmek için 54 bit gerekir. Doğru değeri tek, kapalı bir o kadar da şaşırtıcı değil. Aynı şekilde, 17^14 temsil eden 58 bit alır. Ben de bir tarafından kapalı olan şanslı bir tesadüf (çok fazla sayıda teori geçerli olmadığı sürece), sadece tek bir kapalı oluyor32 birden fazlabu büyüklükte double Sayı yuvarlanır parçalı yapı.

Tam tamsayı üs için, tamsayılar her şekilde kullanmalısınız. double-ücretsiz kendi üs rutin yaz. Eğer y büyük olabilir Eğer oyun tarafından üs kullanın, ama her zaman bu sorunu tartışmalı hale 64, daha az sanırım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS Campus Life

    ASUS Campus

    18 Mart 2013
  • SerienTrailerMP

    SerienTraile

    7 HAZİRAN 2012
  • tutvid

    tutvid

    19 AĞUSTOS 2006