eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Algorytm konwersji ciągu znaków na liczbę zmiennoprzecinkową
Ilość wypowiedzi w tym wątku: 8

  • 1. Data: 2010-12-05 10:22:19
    Temat: Algorytm konwersji ciągu znaków na liczbę zmiennoprzecinkową
    Od: "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>

    Witam!

    Zastanawiam się, w jaki sposób napisać konwerter ciągu znaków na liczbę
    zmiennoprzecinkową (float lub double). Mam kilka prostych, narzucających
    się pomysłów, ale największym problemem każdego z nich jest duża liczba
    obliczeń, z których każde może wprowadzać dodatkowy błąd numeryczny. Czy
    macie jakieś pomysły na zrealizowanie tego zagadnienia z możliwie
    największą dokładnością? Potrzebuję też umieć deterministycznie
    stwierdzić, że dana liczba - choć zapisana poprawnie - jest nieprawidłową
    liczbą zmiennoprzecinkową, na przykład 1e20000.

    Aha - interesuje mnie *algorytm*, proszę więc nie proponować żadnych
    gotowych funkcji.

    Pozdrawiam -- Spook.

    --
    ! ._______. Warning: Lucida Console sig! //) !
    ! || spk || www.spook.freshsite.pl / _ """*!
    ! ||_____|| spook at op.pl / ' | ""!
    ! | ___ | tlen: spoko_ws gg:1290136 /. __/"\ '!
    ! |_|[]_|_| May the SOURCE be with you! \/) \ !


  • 2. Data: 2010-12-05 10:38:08
    Temat: Re: Algorytm konwersji ciągu znaków na liczbę zmiennoprzecinkową
    Od: Mariusz Marszałkowski <m...@g...com>

    On 5 Gru, 11:22, "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>
    wrote:
    > Aha - interesuje mnie *algorytm*, proszę więc nie proponować żadnych  
    > gotowych funkcji.

    Dlaczego nie zrobić tego naturalnie tylko szukać
    jakis algorytmow? Np. tak:

    double ch2d( const char *c ) {
    double t = 0;
    while( *c >= '0' && *c <= '9' ) {
    t = (t * 10) + *c - '0';
    c++;
    }
    if( *c == '.' ) {
    c++;
    double m = 10;
    while( *c >= '0' && *c <= '9' ) {
    t += (*c - '0') / m;
    c++;
    m *= 10;
    }
    }
    return t;
    }


  • 3. Data: 2010-12-05 10:51:58
    Temat: Re: Algorytm konwersji ciągu znaków na liczbę zmiennoprzecinkową
    Od: zdumiony <z...@j...pl>

    W dniu 2010-12-05 11:22, Wojciech "Spook" Sura pisze:
    > Zastanawiam się, w jaki sposób napisać konwerter ciągu znaków na liczbę
    > zmiennoprzecinkową (float lub double). Mam kilka prostych, narzucających
    > się pomysłów, ale największym problemem każdego z nich jest duża liczba
    > obliczeń, z których każde może wprowadzać dodatkowy błąd numeryczny. Czy

    A czy jest jakiś algorytm poza kolejnym przeglądaniem od lewej i
    mnożeniem przez 10?


  • 4. Data: 2010-12-05 11:07:33
    Temat: Re: Algorytm konwersji ciągu znaków na liczbę zmiennoprzecinkową
    Od: Jacek Czerwinski <...@...z.pl>

    W dniu 2010-12-05 11:51, zdumiony pisze:
    > W dniu 2010-12-05 11:22, Wojciech "Spook" Sura pisze:
    >> Zastanawiam się, w jaki sposób napisać konwerter ciągu znaków na liczbę
    >> zmiennoprzecinkową (float lub double). Mam kilka prostych, narzucających
    >> się pomysłów, ale największym problemem każdego z nich jest duża liczba
    >> obliczeń, z których każde może wprowadzać dodatkowy błąd numeryczny. Czy
    >
    > A czy jest jakiś algorytm poza kolejnym przeglądaniem od lewej i
    > mnożeniem przez 10?
    Na chlopski rozum wczesniej czy pozniej sie to do tego sprowadzi.
    Dyskutował bym, czy obie (ew. wszystkie trzy) trzymac w
    calkowitoliczbowym akumulatorze. Na wspolczesnych CPU nie musi dac to
    wzrostu szybkosci jak dawniej, ale dokladnosc 'zaokragleniowa' jest ok.
    Cyfr dokladnych tez wiecej niz finalowa liczba double tej samej ilosci
    bajtow wytrzyma.


  • 5. Data: 2010-12-05 12:02:19
    Temat: Re: Algorytm konwersji ciągu znaków na liczbę zmiennoprzecinkową
    Od: "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>

    Dnia 05-12-2010 o 11:51:58 zdumiony <z...@j...pl> napisał(a):

    > W dniu 2010-12-05 11:22, Wojciech "Spook" Sura pisze:
    >> Zastanawiam się, w jaki sposób napisać konwerter ciągu znaków na liczbę
    >> zmiennoprzecinkową (float lub double). Mam kilka prostych, narzucających
    >> się pomysłów, ale największym problemem każdego z nich jest duża liczba
    >> obliczeń, z których każde może wprowadzać dodatkowy błąd numeryczny. Czy
    >
    > A czy jest jakiś algorytm poza kolejnym przeglądaniem od lewej i
    > mnożeniem przez 10?

    Oczywiście, że tak. Można na przykład spróbować skonstruować tą liczbę
    binarnie na bazie danych zebranych z ciągu znaków. Tyle tylko, że jest to
    rozwiązanie ciężkiego kalibru i wydaje mi się, że istnieje jakieś
    prostsze. Ponadto im więcej operacji arytmetycznych będzie
    przeprowadzanych w trakcie konwersji, tym więcej błędów numerycznych
    wprowadzi się do wyniku i może się w rezultacie okazać, że "2.0e5"
    zostanie skonwertowane na 1.999999216356e5, czego chciałbym uniknąć.
    Oczywiście przykład nieco przesadzony, ale wcale nie tak nierealny, jak
    się wydaje.

    Pozdrawiam -- Spook.

    --
    ! ._______. Warning: Lucida Console sig! //) !
    ! || spk || www.spook.freshsite.pl / _ """*!
    ! ||_____|| spook at op.pl / ' | ""!
    ! | ___ | tlen: spoko_ws gg:1290136 /. __/"\ '!
    ! |_|[]_|_| May the SOURCE be with you! \/) \ !


  • 6. Data: 2010-12-05 12:08:37
    Temat: Re: Algorytm konwersji ciągu znaków na liczbę zmiennoprzecinkową
    Od: "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>

    Dnia 05-12-2010 o 11:38:08 Mariusz Marszałkowski <m...@g...com>
    napisał(a):

    > On 5 Gru, 11:22, "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>
    > wrote:
    >> Aha - interesuje mnie *algorytm*, proszę więc nie proponować żadnych
    >> gotowych funkcji.
    >
    > Dlaczego nie zrobić tego naturalnie tylko szukać
    > jakis algorytmow? Np. tak:

    Dlatego, że każda operacja na liczbach zmiennoprzecinkowych wprowadza
    błędy numeryczne do obliczeń. Może się okazać, że liczbę zapisaną w ciągu
    znaków da się zapisać w postaci liczby zmiennoprzecinkowej bez błędów, ale
    liczby powstałe w trakcie obliczeń będą miały te błędy i wynik nie będzie
    dokładny.

    Pozdrawiam -- Spook.

    --
    ! ._______. Warning: Lucida Console sig! //) !
    ! || spk || www.spook.freshsite.pl / _ """*!
    ! ||_____|| spook at op.pl / ' | ""!
    ! | ___ | tlen: spoko_ws gg:1290136 /. __/"\ '!
    ! |_|[]_|_| May the SOURCE be with you! \/) \ !


  • 7. Data: 2010-12-05 16:39:39
    Temat: Re: Algorytm konwersji ciągu znaków na liczbę zmiennoprzecinkową
    Od: Mariusz Marszałkowski <m...@g...com>

    On 5 Gru, 13:08, "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>
    wrote:
    > Dnia 05-12-2010 o 11:38:08 Mariusz Marszałkowski <m...@g...com>  
    > napisał(a):
    >
    > > On 5 Gru, 11:22, "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>
    > > wrote:
    > >> Aha - interesuje mnie *algorytm*, proszę więc nie proponować żadnych  
    > >> gotowych funkcji.
    >
    > > Dlaczego nie zrobić tego naturalnie tylko szukać
    > > jakis algorytmow? Np. tak:
    >
    > Dlatego, że każda operacja na liczbach zmiennoprzecinkowych wprowadza  
    > błędy numeryczne do obliczeń. Może się okazać, że liczbę zapisaną w ciągu  
    > znaków da się zapisać w postaci liczby zmiennoprzecinkowej bez błędów, ale  
    > liczby powstałe w trakcie obliczeń będą miały te błędy i wynik nie będzie  
    > dokładny.

    To moze konwersje w dwie strony? Najpierw z tekstu na binarna, potem
    z binarnej na tekst. Nastepnie w splupku odejmujesz tekstowe liczby od
    siebie. Rozniece mnozysz np. przez 1000, znow konwertujesz na liczbe
    binarna, po konwersji dzielisz przez 1000 i dodajesz do pierwszej
    binarnej
    :D












  • 8. Data: 2010-12-05 17:44:39
    Temat: Re: Algorytm konwersji ciągu znaków na liczbę zmiennoprzecinkową
    Od: "Marcin 'Qrczak' Kowalczyk" <q...@k...org.pl>

    On Dec 5, 1:08 pm, "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>
    wrote:

    > > Dlaczego nie zrobić tego naturalnie tylko szukać
    > > jakis algorytmow? Np. tak:
    >
    > Dlatego, że każda operacja na liczbach zmiennoprzecinkowych wprowadza  
    > błędy numeryczne do obliczeń.

    Nie każda. Na przykład dodawanie, odejmowanie i mnożenie na liczbach
    całkowitych w typie double w zakresie od -2^53 do 2^53 (dla typowej
    reprezentacji double) są dokładne.

strony : [ 1 ]


Szukaj w grupach

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: