eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programminggsl › Re: gsl
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: gsl
    Date: Wed, 24 Jul 2013 23:17:39 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 75
    Message-ID: <kspg9k$gon$1@node2.news.atman.pl>
    References: <kspc14$60h$1@news.dialog.net.pl>
    NNTP-Posting-Host: 89-73-65-59.dynamic.chello.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1374700660 17175 89.73.65.59 (24 Jul 2013 21:17:40 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Wed, 24 Jul 2013 21:17:40 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130620
    Thunderbird/17.0.7
    In-Reply-To: <kspc14$60h$1@news.dialog.net.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:204199
    [ ukryj nagłówki ]

    W dniu 2013-07-24 22:04, Adam Majewski pisze:
    > Witam,
    >
    >
    > Napisałem drobny program w c z użyciem gsl, oblicz silnię(100).
    > Wynik wydaje się dobry ale ten błąd obliczeń ? Jak to interpretować ?
    > #include <stdio.h> #include <gsl/gsl_errno.h> #include
    > <gsl/gsl_sf.h>
    >
    >
    > // gcc -I/usr/include/gsl/ -L/usr/local/lib/ -lgsl -lgslcblas -lm f.c
    > // gcc -I/usr/include/gsl/ -L/usr/lib/ -lgsl -lgslcblas -lm f.c //
    > factorial //
    > http://www.gnu.org/software/gsl/manual/html_node/Spe
    cial-Function-Usage.html#Special-Function-Usage
    >
    >
    >
    > // The error-handling function //
    > http://www.gnu.org/software/gsl/manual/html_node/Spe
    cial-Functions-Examples.html#Special-Functions-Examp
    les
    >
    >
    >
    > /*
    >
    >
    > */
    >
    > int main(void) { unsigned int n = 100; int status; gsl_sf_result
    > result;
    >
    > status = gsl_sf_fact_e (n, &result);
    >
    >
    > printf("status = %s\n", gsl_strerror(status)); printf("factorial(
    > %2d ) = %f\n", n,result.val); printf("+/- % .18f\n",result.err);
    >
    > return 0; }
    >
    >
    > ./a.out status = success factorial( 100 ) =
    > 9332621544394415096564670479595388257840097037318409
    8831012889540582227238570431295066113089288327277825
    8496640065242705545359762897193828521818658959597240
    32.000000
    >
    >
    >
    > +/-
    > 4144516527479786869998377376409676501474209436767641
    6602380879768122591161803228174716423865792481641279
    576393802186138583881092629521428905984.000000000000
    000000
    >
    >
    >


    gsl_sf_result to para _double_'i. Siłą rzeczy dokładność jest
    na poziomie 10^-15..10^-16. Nie bardzo wiem, jak udało Ci się
    wypisać te wszystkie znaki, ale większość z nich nie ma znaczenia.

    Wynik powinien raczej być zapisany jako

    9.332621544394415*10^(157)+-4.14452*10^(142)

    Wartość / błąd to 4.44089*10^(-16)
    Dość rozsądnie:)


    Jeśli chcesz liczby naturalnej, musisz użyć zmienych naturalnych
    dowolnej precyzji. Nie widzę, by gsl coś takiego miał.

    Jest oczywiście superkombajn gmp (pod windowsem podobno lepiej
    _podobno_ użyć forka MPIR).

    W c++ masz bardzo wygodną lekką ttmath i nawet w boscie coś
    jest (i możę działać jako frontend dla gmp:))

    pzdr
    bartekltg

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: