🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215717

Re: Porównywanie liczb, double float

#215717
From: Pszemol
Date: Thu, 13 Jun 2019 13:39
45 lines
3001 bytes
"J.F." <jfox_xnospamx@poczta.onet.pl> wrote in message 
news:5d00f430$0$17345$65785112@news.neostrada.pl...
> Użytkownik "Pszemol"  napisał w wiadomości grup 
> dyskusyjnych:qdqqh6$n2f$1@dont-email.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.

Teraz jak czytam co napisałeś to wydaje się to oczywiste.
Ale taki byłem szczęśliwy że wreszcie znalazłem buga i uruchomiłem
program że samamu mi się ta klapka w mózgu nie odklapiła - dzięki. 
Technical Details
Message-ID: <qdtjmb$69t$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
References: <qdqqh6$n2f$1@dont-email.me> <5d00f430$0$17345$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
From: "Pszemol" <Pszemol@PolBox.com>
Newsgroups: pl.comp.programming,pl.misc.elektronika
Subject: Re: Porównywanie liczb, double float
Date: Thu, 13 Jun 2019 08:39:28 -0500
Organization: A noiseless patient Spider
Lines: 2
Message-ID: <qdtjmb$69t$1@dont-email.me>
References: <qdqqh6$n2f$1@dont-email.me> <5d00f430$0$17345$65785112@news.neostrada.pl>
Reply-To: "Pszemol" <Pszemol@BigFoot.com>
Mime-Version: 1.0
Injection-Date: Thu, 13 Jun 2019 13:39:24 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="92d1e4c9f4a24b8937c64c00c2c50159"; logging-data="6461"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/fMKLCfVDmCXW5YNuvvT14"
Cancel-Lock: sha1:aksNHCyJbjaGV0UFtnPJ79orGh0=
X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
In-Reply-To: <5d00f430$0$17345$65785112@news.neostrada.pl>
X-Newsreader: Microsoft Windows Live Mail 14.0.8117.416
Importance: Normal
X-Priority: 3
X-MSMail-Priority: Normal
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit