eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Porównywanie liczb, double float
Ilość wypowiedzi w tym wątku: 95

  • 11. Data: 2019-06-12 17:27:32
    Temat: Re: Porównywanie liczb, double float
    Od: "J.F." <j...@p...onet.pl>

    Użytkownik "Szyk Cech" napisał w wiadomości grup
    dyskusyjnych:Jk8ME.2$6...@f...fr7...
    >> 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ą?

    >Weź chłopie ić na studia (ja miałem to nawet na wieczorowych 20 lat
    >temu) i się doucz! Zamiast zadawać głupie pytania. Choć gdybyś dłubał
    >w czymś innym niż VB to byś wiedział o problemie (w każdej książce do
    >Asemblera czy C czy C++ to powinno być).

    Musialbym sobie przypomniec ... ale przy okazji Assemblera raczej nikt
    nie poruszal takiego watku.
    Przy C predzej, ale to gdzies na pograniczu.

    Kto nie uczyl sie Fortranu, ten nie zna zycia :-)

    J.



  • 12. Data: 2019-06-12 17:45:14
    Temat: Re: Porównywanie liczb, double float
    Od: s...@g...com

    W dniu środa, 12 czerwca 2019 07:17:44 UTC-5 użytkownik Pszemol napisał:
    >
    > Czy to jest normalne zachowanie się VB6?
    >
    > Czy inne Visuale jak VC++ lub VC# też tak mają?

    Koledzy juz powiedzieli co trzeba. Ja dodam ze jak ten kto ten program pisal naprawde
    malo wie i jesli on dzialal wczesniej to tylko przypadkiem.

    Jesli on, ten kontraktor jest z indii to albo zglos to jako ryzyko projekt managerowi
    i zasugeruj zeby znalezli nieco kompetentniejszego albo od teraz testujcie wszystko
    tak jakby to wam, nie przymierzajac, malpa pisala.

    Co do PM-a. Policz ile czasu na to poswieciles, udokumentuj buga i zbieraj. Jak sie
    trafi kolejny taki kwiatek to zbieraj w kupke.
    Nawet dobry PM nie unegocjuje wiele bez podkladki. A negocjacje nie koniecznie musza
    sie toczyc z kontraktorem, moze to byc tez wewnetrzne tarcie na zmiane na inna lige
    cenowa.
    Podkladka czyni cuda.


  • 13. Data: 2019-06-12 18:17:17
    Temat: Re: Porównywanie liczb, double float
    Od: stary grzyb <s...@o...pl>

    > Kto nie uczyl sie Fortranu, ten nie zna zycia :-)

    Prawda, ale wcześniej trzeba było zaliczyć Algol.


  • 14. Data: 2019-06-13 15:24:35
    Temat: Re: Porównywanie liczb, double float
    Od: "Pszemol" <P...@P...com>

    "JDX" <j...@o...pl> wrote in message
    news:5d00fc5f$0$522$65785112@news.neostrada.pl...
    > On 2019-06-12 14:17, Pszemol wrote:
    > [...]
    >> Pisząc w Visual Basic 6 gostek porównywał rezultat konwersji CDbl()
    > No nieźle, nieźle. Myślałem, że to ja jestem dinozaurem, który w chacie
    > używa WinXP, a tu widzę, że ludzie jeszcze komercyjnie piszą coś nowego
    > pod VB6, do którego extended support skończył się w 2008. :-D Tak mnie
    > jakoś tknął ten VB6, bo pamiętam, jak mój koleżka się nim zachwycał
    > gdzieś pod koniec lat 90-tych. :-D

    To raczej utrzymywanie starego kodu.


  • 15. Data: 2019-06-13 15:35:17
    Temat: Re: Porównywanie liczb, double float
    Od: "Pszemol" <P...@P...com>

    "Szyk Cech" <s...@s...pl> wrote in message
    news:Jk8ME.2$6r.0@fx19.fr7...
    >> 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ą?
    >
    > Weź chłopie ić na studia (ja miałem to nawet na wieczorowych
    > 20 lat temu) i się doucz! Zamiast zadawać głupie pytania.

    Ale kultury osobistej Cię tam nie nauczyli... szkoda.

    > Choć gdybyś dłubał w czymś innym niż VB to byś wiedział
    > o problemie (w każdej książce do Asemblera czy C czy C++
    > to powinno być).

    ha ha :-) No brawo.


  • 16. Data: 2019-06-13 15:36:14
    Temat: Re: Porównywanie liczb, double float
    Od: "Pszemol" <P...@P...com>

    <s...@g...com> wrote in message
    news:f37ce076-b7e3-4dfc-803c-12c1d09de65d@googlegrou
    ps.com...
    > W dniu środa, 12 czerwca 2019 07:17:44 UTC-5 użytkownik Pszemol napisał:
    >>
    >> Czy to jest normalne zachowanie się VB6?
    >>
    >> Czy inne Visuale jak VC++ lub VC# też tak mają?
    >
    > Koledzy juz powiedzieli co trzeba. Ja dodam ze jak ten kto ten program
    > pisal naprawde malo wie i jesli on dzialal wczesniej to tylko przypadkiem.
    >
    > Jesli on, ten kontraktor jest z indii to albo zglos to jako ryzyko projekt
    > managerowi i zasugeruj zeby znalezli nieco kompetentniejszego albo od
    > teraz testujcie wszystko tak jakby to wam, nie przymierzajac, malpa
    > pisala.
    >
    > Co do PM-a. Policz ile czasu na to poswieciles, udokumentuj buga i
    > zbieraj. Jak sie trafi kolejny taki kwiatek to zbieraj w kupke.
    > Nawet dobry PM nie unegocjuje wiele bez podkladki. A negocjacje nie
    > koniecznie musza sie toczyc z kontraktorem, moze to byc tez wewnetrzne
    > tarcie na zmiane na inna lige cenowa.
    > Podkladka czyni cuda.

    Nie wiem jaką mają z nim umowę.
    Ale ich wystawił do wiatru bo ostatnio jakąś dodatkową funkcję
    chcieli dodać do programu i nie był zainteresowany aby przyjść
    i pisać ten kod dalej... Gdy patrzę jak jest kod napisany to się nie dziwię.


  • 17. Data: 2019-06-13 15:37:55
    Temat: Re: Porównywanie liczb, double float
    Od: "Pszemol" <P...@P...com>

    "Mateusz Viste" <m...@n...pamietam> wrote in message
    news:5d00f035$0$15194$426a74cc@news.free.fr...
    > On Wed, 12 Jun 2019 07:17:45 -0500, Pszemol wrote:
    >> 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.
    >
    > Prawdziwi programiści nie używają liczb zmiennoprzecinkowych.

    Faktem jest, że gdy zmienne nie skaczą dynamicznie od e-15 do e+15 to
    warto znaleźć zakres wariacji mierzonej zmiennej, oczekwianą dokładność
    i zamiast na float operować na long integer * 10000 na przykład...

    > Obowiązkowa lektura na wieczór:
    > http://perso.ens-lyon.fr/jean-michel.muller/goldberg
    .pdf

    Dzięki za linka, zapoznam się w wolnym czasie.


  • 18. Data: 2019-06-13 15:39:28
    Temat: Re: Porównywanie liczb, double float
    Od: "Pszemol" <P...@P...com>

    "J.F." <j...@p...onet.pl> wrote in message
    news:5d00f430$0$17345$65785112@news.neostrada.pl...
    > 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.

    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.


  • 19. Data: 2019-06-13 17:28:02
    Temat: Re: Porównywanie liczb, double float
    Od: Dariusz Dorochowicz <_...@w...com>

    W dniu 2019-06-12 o 14:17, Pszemol pisze:
    > 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ą?

    Kiedy dawno temu (naprawdę dawno) pisałem/modyfikowałem program do pracy
    dyplomowej to w pewnym momencie zaczął się wysypywać z błędem dzielenia
    przez zero. Po dochodzeniu okazało się że pomimo jawnej deklaracji
    double pewne konkretne obliczenia robił na real i w mianowniku pojawiało
    się zero. Żadne jawne deklaracje i wymuszenia typu obliczeń tego nie
    potrafiły zmienić, pomogła dopiero zmiana kompilatora. Sztuczne dodanie
    obliczeń powodowało tylko przesunięcie momentu wywalenia się programu.
    Podobne obliczenia w innym miejscu robił jak należy. A ten drugi
    (właściwie to on był pierwszy tylko z pewnych powodów chciałem użyć
    innego) nie miał w ogóle takich problemów.

    Pozdrawiam

    DD


  • 20. Data: 2019-06-16 21:19:42
    Temat: Re: Porównywanie liczb, double float
    Od: AK <n...@n...net>

    On 2019-06-12 14:44, J.F. wrote:
    > Użytkownik "Pszemol"  napisał w wiadomości grup

    > To nie jest problem VB, to jest problem przyjetego formatu liczb
    > rzeczywistych.

    I tam. Nieprawda. W _kazdym_ systemie/formacie FP moze sie zdarzyc.

    > Albo problem programisty :-)

    _Wylacznie_ problem programisty.

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

    Prawda!

    >> Czy inne Visuale jak VC++ lub VC# też tak mają?
    >
    > To jest problem procesora z FP IEEEcostam.

    Wcale nie. To jest problem jak najbardziej ogolny.

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

    Racja! Sam Decimal tak naprawde przed niczym sam z siebie nie chroni.

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

    Raaacja ! :)

    AK

strony : 1 . [ 2 ] . 3 ... 10


Szukaj w grupach

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: