Re: Fatalne obliczenia w C

Autor: Pawel Baranowski (baranows_at_uci.agh.edu.pl)
Data: Fri 23 Aug 1996 - 14:43:45 MET DST


In <1.5.4.16.19960823104245.1b978e70_at_lodz1.p.lodz.pl>, zylla_at_lodz1.p.lodz.pl (Romuald Zylla, Tech.Univ. of #sd< Poland) writes:
>>> > maly przyklad - ile to (a++)-(a++) w C?
>>
>> ^^^^^^^^^^^
>> Tak nie wolno pisac !!!!!!!! wynik moze byc rozny na
>>kazdym kompilatorze. elementarne zasady programowania w C sie
>>klaniaja.
>
> A mowilo sie, ze jezyki programowania maja zwiazek z matematyka:
> sa scisle; teraz widac, ze C jest zwiazany raczej z
> nowa dziedzina matematyki - teoria chaosu.
>
Dlaczego akurat C ? Norma Fortraniu 77 tez nie precyzuje wielu rzeczy
np okresla, ze zmienne podwojnej precyzji (DOUBLE PRECISION) maja
wieksza precyzje niz rzeczywiste (REAL) - nie podaje w ogole ile maja bajtow.
Implementacja normy zalezy juz od firmy piszacej kompilator, ktrora jeszcze
dodaje czesto rozne nieformalne, ale znane rozszerzenia ( np DO .. END DO, czy
INCLUDE - jesli chodzi np. o Fortran 77) + wlasne pomysly, co pozniej prowadzi
do nieprzenosnosci zle (tzn niezgodnie z norma) pisanego kodu.
Jesli chodzi o standaryzyzacje C, to gdzies przed rokiem byl cykl artykulow
(chyba PC Q (?) ) i jak to z tego niewiele wychodzi.

>> Jak ktos pisze w ten sposob programy, niech sie nie dziwi ze nie
>>wszedzie dzialaja tak samo. A jak dzialaja, to raczej przez przypadek.
>
> Klaniaja sie programy z M$ - wszystkie sa kompilowane w C
Raczej kompilatorami M$, ktorych jakosc jest nienajlepsza - dwie ich wpadki:
- MS C 6.0 - maly programik w ANSII C dawal zle wyniki w obliczeniach, udalo mi
                  sie wysledzic linie gdzie sie to dzialo -proste dzielenie dwoch liczb typu
                  double generowalo nieprawidlowy wynik. Zmiany opcji kompilatora
                  nic nie dawaly ( sprawdzalem tylko optymalizacje - nie zmienialem
                  opcji dla linkera - biblioteki !!! - uzywalem emulacji koprocesora i malego
                  modelu pamieci ), po czym skompilowalem to Turbo C 2.0 i bylo OK.
- MS Fortran 5.1 - program w FORTRANIE z opcja doloczajaca do kodu
                          symboliczna informacje dla CodeView ( opcja /Zi ) powodowal
                          blad w pamieci i zawieszenie komputera, a bez niej chodzil
                          prawidlowo.
Od tamtej pory obchodze wszystkie ich produkty programistyczne z daleka.

Podsumowujac normy normami, a to co robia z nimi firmy celowo lub nie to co
innego.

Apropos- moze mi ktos wyjasnic co to jest format liczb "Microsoft binary format"
liczb zmiennoprzecinkowych ( jak wyglada ). Do konwersji na format IEEE sluzyly
funkcje dieeetpmsbin,dmsbintoiee,fieeetomsbin,fmsbintoieee.

                                                 Pawel Baranowski
-----------------------------------------------------------------------------
E-mail:owski_at_slc1.geol.agh.edu.pl
         baranows_at_uci.agh.edu.pl



To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 12:52:37 MET DST