eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingDlaczego software to F35 jest pisany w C++ a nie w Ada › Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
  • Data: 2012-10-29 12:01:15
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Baranosiu <r...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dnia 29.10.2012 Maciej Sobczak <s...@g...com> napisał/a:
    >> Po prostu
    >> był błąd w specyfikacji Ada95 (a taka obowiązywała w momencie lotu
    >> Ariane 5 :D)
    >
    > W Ariane 5 nie było problemu z przekręceniem typu bazowego, tylko z rzutowaniem. I
    nawet nie dotyczyło to typu Integer.

    Ależ tam właśnie był overflow, jeden moduł (stary) pracował na
    16-bitowych danych a drugi (nowy) liczył z 32-bitową dokładnością i
    jak powiedzmy wyszło z obliczeń 16#20001 (przepełnienie) to do
    "starego" modułu trzeba było wstawić 16#7FFF (co było w innych
    miejscach zrobione na if-ach) a program wstawiał 16#20001 co stary
    moduł widział jako 16#0001 (i nie miał szans wykryć, że to wynik
    przepełnienia, bo programista "starego" modułu dopuścił jako parametr
    wejściowy dowolną liczbę całkowitą - w momencie gdy to pisał chodziło
    o dane 16-bitowe, stary moduł 16-bitowy został ponownie wykorzystany z
    komputerem 32-bitowym). Dziwi mnie tylko że ktoś te dwa "if-y" opuścił
    ze względu na potrzebę obniżenia obciążenia komputera mimo że we
    wszystkich innych miejscach pozostały (no i nawet jeśli wyrzucono
    generowanie wyjątków w czasie wykonania z tego fragmentu kodu, to
    przecież na 99% kompilator w momencie kompilacji ostrzegał o
    możliwości przepełnienia :D).

    >> Załóżmy, że sprzętowo Integer jest powiedzmy 8-bitowy
    >
    > Ale nie jest.
    >
    >> tak wiem, według specyfikacji musi być co najmniej
    >> 16-bitowy ze znakiem, ale chodzi o prostotę przykładu
    >
    > Czyli: "olejmy specyfikację w miejscu X, wtedy uda się podkreślić niedociągnięcie w
    miejscu Y".

    Ok, niech będzie dla 16-bitów (zgodnie ze specyfikacją):

    type My_Type range -25600 .. 25600;

    I mnożenie 2*25600 daje (w 16-bitach ze znakiem) -14336 (czyli wg
    'range' dopuszczalną wartość) - zasada dokładnie ta sama.

    > Krótko: masz rację.
    >

    Nie o to chodzi czy mam czy nie mam, nie potrafię po prostu zrozumieć
    jak włączenie wyjątków w czasie wykonania mogło coś zmienić w tym
    przypadku (zakładając, że kod "starego" modułu nie zostałby zmieniony)
    i dlaczego to mogło uratować sprawę, ale ok, nie ciągnę dalej tematu.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: