Komputery nigdy nie były dobre w typach zmiennoprzecinkowych. W niektórych językach nawet 0.003 * 1000 = 2.99999999
(nie stosują "niejawnych" zaokrągleń przy wypisywaniu tak jak C, C++ czy inne). Jest to pewna "niedoskonałość" związana z konwersją liczby dziesiątkowej na dwójkową i vice versa.
O ile liczba 0.5(10) to w dwójkowym 0.1(2), to 0.1(10) już o wiele ciężej zapisać: 1÷16+1÷32+1÷256+1÷512+1÷2048, czyli 0.00011001101(2) i to dalej nie jest dokładnie 0.1(10).
dokładność masz tylko stosując dzielenie przez dwa i ułamki dające się zapisać jaki a/x, gdzie x jest którąkolwiek potęgą liczby 2.
Podsumowując w przybliżeniu stosowanym przez procesor: 1.45 - 0.005 - 0.005 > 1.44.
Lepiej zastosować iterację używając typów całkowitych. W twoim wypadku można użyć inta, tyle że przemnożyć tą liczbę przez 1000.
Na giełdach gdzie liczone są duże sumy nie używa się typu float, ani double, tylko właśnie przemnożone inty, żeby nie stracić tej precyzji, co może się wiązać z ogromnymi stratami.