-
Data: 2019-06-12 14:17:45
Temat: Porównywanie liczb, double float
Od: "Pszemol" <P...@P...com> szukaj wiadomości tego autora
[ pokaż wszystkie 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:48 Zbych
- 12.06.19 14:56 Irek.N.
- 12.06.19 15:07 bartekltg
- 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 18:17 stary grzyb
- 13.06.19 15:24 Pszemol
- 13.06.19 15:35 Pszemol
- 13.06.19 15:37 Pszemol
- 13.06.19 15:39 Pszemol
Najnowsze wątki z tej grupy
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
- Ideologia Polskiego Programisty wer.3
Najnowsze wątki
- 2024-04-29 Warszawa => Staż w dziale Sprzedaży B2B (2 miejsca) <=
- 2024-04-29 Gdańsk => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-04-29 Ulm => IT Network Engineer <=
- 2024-04-29 Gdańsk => UX/UI Designer <=
- 2024-04-29 Gdańsk => AI Specialist <=
- 2024-04-29 frankowicze odcinek NNN
- 2024-04-29 Warszawa => Specjalista ds. Cyberbezpieczeństwa <=
- 2024-04-29 Kraków => MS Dynamics 365BC/NAV Developer <=
- 2024-04-29 Zielona Góra => Inżynier R&D Energoelektronik <=
- 2024-04-29 Warszawa => Google Ads Freelancer <=
- 2024-04-28 wymiana przewodu od licznika do mieszkania
- 2024-04-28 Lustra w maszynie ASML
- 2024-04-28 Elektryk przytarł podłogę
- 2024-04-27 Nowy, "szybki "komputer AsRock nie posiada modułu TPM
- 2024-04-27 Nowy, "szybki "komputer AsRock nie posiada modułu TPM