Pomyłka na 23 biliardy dolarów

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.

żadnych reklam, sama wiedza.

Zarejestruj się na BEZPŁATNY NEWSLETTER i raz w tygodniu otrzymuj najważniejsze wiadmości
ze świata IT, nowych technologii i kryptowalut.

Bez reklam.

  1. Awatar bolo
    bolo

    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. Awatar bolo
      bolo

      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. Awatar witek
        witek

        To ma jakis zwiazek z prowizja.

    2. Awatar Magnes
      Magnes

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

    3. Awatar michuk
      michuk

      A co to za nowy portal Dotslash?

      1. Awatar mgol
        mgol

        O tym samym pomyślałem. 🙂

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

      2. Awatar jellonek
        jellonek

        oj zamiast sie dopytywac mogles poprawic literowke 😉

      3. Awatar Zaus
        Zaus

        A ukośnikkropka?

    4. Awatar DerDevil
      DerDevil

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

  2. Awatar Bender
    Bender

    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. Awatar mtjm
      mtjm

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

  3. Awatar mgol
    mgol

    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. Awatar slawek
      slawek

      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. Awatar ak47
        ak47

        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. Awatar mgol
        mgol

        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. Awatar haael
        haael

        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. Awatar BoBsoN
          BoBsoN

          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. Awatar haael
          haael

          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. Awatar A
          A

          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. Awatar maciek
          maciek

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

  4. Awatar karakar
    karakar

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

  5. Awatar janc
    janc

    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. Awatar Cieniek
    Cieniek

    Ja tam widzę 23 tryliony dolarów.

    1. Awatar witek
      witek

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

  7. Awatar Cieniek
    Cieniek

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

    1. Awatar witek
      witek

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *