🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215716

Re: Porównywanie liczb, double float

#215716
From: J.F.
Date: Wed, 12 Jun 2019 12:44
49 lines
2620 bytes
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.

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.
Technical Details
Message-ID: <5d00f430$0$17345$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!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.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <qdqqh6$n2f$1@dont-email.me>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!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.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: "J.F." <jfox_xnospamx@poczta.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
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: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit