eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaPorównywanie liczb, double floatRe: Porównywanie liczb, double float
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.
    stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.new
    s.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    From: "J.F." <j...@p...onet.pl>
    Newsgroups: pl.comp.programming,pl.misc.elektronika
    References: <qdqqh6$n2f$1@dont-email.me>
    In-Reply-To: <qdqqh6$n2f$1@dont-email.me>
    Subject: Re: Porównywanie liczb, double float
    Date: Wed, 12 Jun 2019 14:44:39 +0200
    MIME-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=response
    Content-Transfer-Encoding: 8bit
    X-Priority: 3
    X-MSMail-Priority: Normal
    Importance: Normal
    X-Newsreader: Microsoft Windows Live Mail 16.4.3528.331
    X-MimeOLE: Produced By Microsoft MimeOLE V16.4.3528.331
    Lines: 50
    Message-ID: <5d00f430$0$17345$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 83.26.105.219
    X-Trace: 1560343600 unt-rea-a-01.news.neostrada.pl 17345 83.26.105.219:50896
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:213537 pl.misc.elektronika:743693
    [ ukryj nagłówki ]

    Użytkownik "Pszemol" napisał w wiadomości grup
    dyskusyjnych:qdqqh6$n2f$...@d...me...
    >Sub AlaMaKota(nieważne tutaj argumenty procedury)
    >Dim len as Double

    >len = CDbl("tekst wydłubany z RS232") - 1.8

    >If len <> CDbl("inny tekst wydłubany z RS232) Then
    > zgłoś błąd i kapitulujemy... kaput!
    >Else
    > lecimy z testami talej, wsio w pariadkie
    >Endif.

    >Pierwszy tekst z RS232 był 32.8, drugi 31. 32.8-1.8 = 31.
    >Powinno być wszystko ok, bo w matematyce 31 równe jest 31 :-)
    >Wynik porównania VB6 był 31 nie jest równe 31 i program
    >kapitulował...

    >Przyczyną błędu była różnica odejmowania wynosząca 15.1234e-15

    >Dlaczego konwersja CDbl stringu 31 lub 32.8 dodaje jakieś
    >śmieci do zmiennej double float na 15 miejscu po przecinku??
    >A może odejmowanie stałej 1.8 wprowadza ten błąd?
    >Czy to jest normalne zachowanie się VB6?

    To nie jest problem VB, to jest problem przyjetego formatu liczb
    rzeczywistych.
    Albo problem programisty :-)

    31 jest dokladne, 0.8 nie.
    0.5 jest dokladne, 0.25 i 0.75 itd - ale wiekszosc liczb "dziesietnych
    po przecinku" niestety nie.

    Po prostu nie da sie zapisac 32.8 dokladnie.
    Programista ma o tym wiedziec i sie zabezpieczyc :-)

    >Czy inne Visuale jak VC++ lub VC# też tak mają?

    To jest problem procesora z FP IEEEcostam.

    Akurat .net ma dodatkowe formaty (Decimal), w ktorych powinno to
    dzialac.
    Tylko trzeba ie
    Ale i tak bym dorzucil zabezpieczenie.

    Problem promieniuje na bazy danych, gdzie mamy duzo kwot, a te grosze
    tez nie sa dokladne :-)

    J.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

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: