-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!go
blin1!goblin.stu.neva.ru!eternal-september.org!feeder.eternal-september.org!rea
der01.eternal-september.org!.POSTED!not-for-mail
From: "Pszemol" <P...@P...com>
Newsgroups: pl.comp.programming,pl.misc.elektronika
Subject: Porównywanie liczb, double float
Date: Wed, 12 Jun 2019 07:17:45 -0500
Organization: A noiseless patient Spider
Lines: 1
Message-ID: <qdqqh6$n2f$1@dont-email.me>
Reply-To: "Pszemol" <P...@B...com>
Mime-Version: 1.0
Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
Content-Transfer-Encoding: 8bit
Injection-Date: Wed, 12 Jun 2019 12:17:43 -0000 (UTC)
Injection-Info: reader02.eternal-september.org;
posting-host="169dc811dd8517175745699fb5ac864e";
logging-data="23631";
mail-complaints-to="a...@e...org";
posting-account="U2FsdGVkX19nLYaKO+pkim3DN9r6hdTt"
Cancel-Lock: sha1:SYd4I3XEB36mrBHF4EwkmKgrwlE=
X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
X-Newsreader: Microsoft Windows Live Mail 14.0.8117.416
Importance: Normal
X-Priority: 3
X-MSMail-Priority: Normal
Xref: news-archive.icm.edu.pl pl.comp.programming:213535 pl.misc.elektronika:743691
[ ukryj nagłówki ]Witam, spędziłem wczoraj sporo godzin w biurze na debugowaniu
kodu napisanego przez naszego kontraktora i w końcu znalazłem buga.
Przyczyną błędu była różnica odejmowania dwu liczb całkowitych
wynosząca 15.1234e-15 :-)
Ale może więcej szczegółów podam:
Pisząc w Visual Basic 6 gostek porównywał rezultat konwersji CDbl()
stringu od którego odjął stałą numeryczną 1.8 do lokalnej zmiennej double.
Czyli mamy kod:
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ł...
Po zamienieniu testu "if double <> double then" na test
"if double - double < -0.001 Or double - double > 0.001 then"
program zaczął pracować normalnie.
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?
Czy inne Visuale jak VC++ lub VC# też tak mają?
Następne wpisy z tego wątku
- 12.06.19 14:29 Mateusz Viste
- 12.06.19 14:44 J.F.
- 12.06.19 14:47 Wojciech Piechowski
- 12.06.19 14:48 Zbych
- 12.06.19 14:56 Irek.N.
- 12.06.19 15:21 JDX
- 12.06.19 16:52 Szyk Cech
- 12.06.19 16:53 Queequeg
- 12.06.19 16:54 Cezary Grądys
- 12.06.19 17:27 J.F.
- 12.06.19 17:45 s...@g...com
- 12.06.19 18:17 stary grzyb
- 13.06.19 15:24 Pszemol
- 13.06.19 15:35 Pszemol
- 13.06.19 15:36 Pszemol
Najnowsze wątki z tej grupy
- [newbie] Jaki multimetr za 2-4 stówy?
- szafka sieciowa
- Raspberry Pi 5 + dyski SATA
- lutownica na węgiel
- Znów czary (albo niewiedza) - tym razem fotowoltaika
- Chess
- Vitruvian Man - parts 7-11a
- przeźroczyste koszulki
- Re: Win 10/11 nie lubi OKI
- Programator czasowy TUYA.
- Dlaczego energia elektryczna jest droga i cały czas drożeje
- twardy dysk stuka
- Oclenie alkalicznych akumulatorów
- Powerbank jednonapieciowy, a trzynapieciowy
- Lustra w maszynie ASML
Najnowsze wątki
- 2024-05-09 Vitruvian Man - parts 7-11a
- 2024-05-09 Drukara laserowa
- 2024-05-09 Chess
- 2024-05-09 sedzia Szmydt
- 2024-05-09 Chess
- 2024-05-09 [newbie] Jaki multimetr za 2-4 stówy?
- 2024-05-09 Chcą poł. tunelem Europę z Afryką - 27km za 6GEUR
- 2024-05-09 Gorzów Wielkopolski => Konsultant/Wdrożeniowiec Comarch ERP XL <=
- 2024-05-09 Kraków => Senior PHP Developer (Symfony) <=
- 2024-05-09 Vitruvian Man - parts 7-11a
- 2024-05-09 Vitruvian Man - parts 7-11a
- 2024-05-09 Chess
- 2024-05-09 Vitruvian Man - parts 7-11a
- 2024-05-09 szafka sieciowa
- 2024-05-09 Białystok => Senior Software Engineer PHP (BillPro) Contractor <=