Pomyłka na 23 biliardy dolarów

  • Home
  • /
  • Blog
  • /
  • Pomyłka na 23 biliardy dolarów

Data: 16 lipca, 2009

CNN podał, że z powodu błędu w oprogramowaniu pewien mieszkaniec USA został obciążony kwotą 23.148.855.308.184.500 USD.

Zdarza się 😉 Dla czytelników OSnews ciekawsze może być jednak to, że wkrótce potem pewien geek z krwi i kości rozgryzł na /. co mogło być przyczyną pomyłki. Założył, że kwota zapisywana jest jako liczba stałoprzecinkowa, a więc należy ją pomnożyć przez 100 i zapisać w ten sposób liczbę centów: 2314885530818450000. Następnie zauważył, że heksadecymalnie jest to 0x2020202020201250. Znak o kodzie 0x20 to… spacja. A więc prawdopodobnie 8-bajtowe pole, które miało zawierać wartość 0x1250 (46,88 USD) zostało dopełnione spacjami, zamiast zerami (w sensie 0x00).

Fajny przykład tego, jak na podstawie skromnej notki prasowej można wydedukować co nieco o szczegółach implementacji systemu.

Podobne wpisy

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone


  1. bolo pisze:

    W tym wytłumaczeniu nie pasuje mi jedynie to, że po konwersji tego jakby trochę przypadkowego ciągu bitów na system dziesiętny wyszła sumka zakończona 4 zerami (jakby zaokrąglona do 100 USD). Szanse na to są jak 1:10000. Screenshot na CNN.com pokazuje, że naprawdę suma miała na końcu 4 zera, to nie dziennikarze zaokrąglili. Więc może jest jakieś lepsze wytłumaczenie?

    1. bolo pisze:

      Aha, no i podobno kupował tylko papierosy. Camele chyba nie kosztują 46,88 USD 😉 Może kupił 10 paczek? Albo ściemnia? Inny koleś kupował papierosy za 3,29 USD i również zobaczył obciążenie na dokładnie tę samą kwotę.

      1. witek pisze:

        To ma jakis zwiazek z prowizja.

    2. Magnes pisze:

      Spacje to zgoda, ale końcówka to nie cena, jaką zaplacił.

    3. michuk pisze:

      A co to za nowy portal Dotslash?

      1. mgol pisze:

        O tym samym pomyślałem. 🙂

        To pewnie to przyzwyczajenie do uruchamiania programów z konsoli… 😉

      2. jellonek pisze:

        oj zamiast sie dopytywac mogles poprawic literowke 😉

    4. DerDevil pisze:

      to jest przykład na to że palenie szkodzi 😀

  2. Bender pisze:

    Czy mi się zdaje czy gdyby dalej coś kupował to w końcu doszedłby do końca i liczba zamieniłaby się na dodatnią 🙂

    Czy ja to dobrze myśle, bo jeśli int nie jest unsigned (czyli ma po równo liczb ujemnych jak i dodatnich licząc od zera to idąc w dół w końcu doszedłby do momentu zmiany na dodatnią:) ?

    1. mtjm pisze:

      Chyba nikt nie przyjmie zamówienia na 92233720368547758,09 dolarów, a to najmniejsza dla ludzi cena, przy której wyjdzie ujemny koszt.

  3. mgol pisze:

    Nie rozumiem. Po co w ogóle uzupełniać tę liczbę czymkolwiek? No chyba że trzymają wszystko jako tablice charów i "zerują" wszystkie pola ręcznie. Hm, zaczynam się ich bać. 😀

    1. slawek pisze:

      Operacje bankowe, itp. mają ściśle określony sposób zapisu i zaokrąglania liczb. Z tego co słyszałem(historia z początku lat 90) jedna polska firma miała spore problemy to tym jak wymyślili że będą trzymać wszystko na doublach, bo przecież będzie bardzo dokładnie. Było aż do momentu instytucja zorientowała się że z systemu znikają jakieś miliony.

      1. ak47 pisze:

        doublach ?
        gratuluje systemu finansowego 🙂
        Przeca wiekszości wartosci ułamkowych nie da się w systemie dwójkowym przedstawić dokładnie. Przykład 0.1+0.1+0.1-0.3. Mały hint do obliczeń finsnsowych trzeba decimali używać.

      2. mgol pisze:

        Po co jakieś double? Przecież można korzystać z liczb całkowitych, zwyczajnie. Mało co się nie zmieści w zwykłym incie, nie mówiąc już o long longach itd…

      3. haael pisze:

        Inty są bardzo fajne, ale jest spory problem z ułamkami groszy, które często występują w różnych kursach, akcjach, giełdach itp. Rozwiązaniem jest trzymanie kwot w liczbach wymiernych.

        "będą trzymać wszystko na doublach, bo przecież będzie bardzo dokładnie. Było aż do momentu instytucja zorientowała się że z systemu znikają jakieś miliony"
        To chyba w Ghost in the Shell jeden terrorysta ocykał bank w ten sposób i kupił sobie za to bombę atomową :).

        1. BoBsoN pisze:

          A gadanie, że problem. Nie słyszeli o typie Currency? Zapisuje się wartość na int do czwartego miejsca po przecinku (czyli zgodnie z metodologią obliczeń na giełdach i w bankach). Implementacja takiego typu jest banalnie prosta nawet w językach, które go nie mają.

        2. haael pisze:

          Liczby stałoprzecinkowe nie rozwiązują problemu. Powiedzmy, że dolar staniał do funta o 0,0001 funta a funt do euro o 0,0001 euro. O ile staniał dolar do euro?

          A jeżeli banki rzeczywiście gubią czwarte miejsce po przecinku, to da się to wykorzystać, np. kradnąc miliardy małych kwot po 0,0000001 centa :).

        3. Kiedyś była dosyć słynna sprawa informatyka jednego z zachodnich banków… jak wiadomo banki obcinają te małe końcówki, gość ustawił system tak, że trafiały one na jego konto. Sprawa by się nie wydała, gdyby nie to że zachorował i bank zatrudnił jakiegoś zastępce na ten czas 😀

          PS: Gdyby ktoś znalazł źródło tej "plotki" bo niestety mi zginęło 🙁

        4. maciek pisze:

          currency? int? to dla mienczaków. pisze sie <code>mov eax,[dword ptr</code> i tyle 😉

  4. karakar pisze:

    Może to ich sposób na walkę z kryzysem. 😛

  5. janc pisze:

    błędy sie zdarzają 🙂
    jak np ten http://lwn.net/Articles/341773/

    aż dziw, że nie ma jeszcze newsa … trasz,ljz nie spać! 🙂
    swoją drogą błąd jest bardzo ciekawy:)

  6. Cieniek pisze:

    Ja tam widzę 23 tryliony dolarów.

    1. witek pisze:

      Zle widzisz. Jest to jeden z pierwszych newsow na osnews, w ktorych nie popelniono bledow w zapisie liczby oraz jej nazwie. 🙂

  7. Cieniek pisze:

    Jeszcze jedna uwaga: Zamiast kropek powinny być przecinki – jeśli już zachowywać notację oryginalną. Lub powinny być spacje, jeśli przyjąć notację polską.

    1. witek pisze:

      Polska notacja ma kropki. Niestety 😉 Juz wole spacje. Tzn. jeszcze bardziej wolalbym przecinki, ale w polsce uzywa sie ich do czego innego.

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

Newsletter OSnews raz w tygodniu. Bez reklam.