Udv!
Aki jaratos a temaban, azt kerem, hogy homaYOsitson fel...:-))
A problema a lebegopontos muveletekkel van C++ Builder-ben.
Adott a kovetkezo:
double a = ((0.24 - 0.04) / 0.2); Ez elvileg 1
double b = 1.0;
if (a < b) ShowMessage ("kisebb"); Ez elvileg hamis, de megis igaz
A kerdesem az, hogy ha egy muvelet eredmenye 1, akkor az double-kent ertelmezve
miert lesz 0.99999999999999 ?
Illetve, hogyan oldhato meg az, ha nekem lebegopontos szamokkal kell precizen
szamolni, ill. felteteles muveleteket vegrehajtani?
Egy kollegam most "tert at" delphi-rol C++ Builderre, es az athozott kodok eppen
ezek miatt a "hibak" miatt nem mukodnek.
Miert kezeli a Pascal jol ezeket a szamokat?
Ime egy konkret pelde, ami Delphiben mukodik, C++ -ban pedig nem:
mvalue = 0.24;
BoxWeight = 0.17;
ProdWeight = 0.07;
--- c++:
double mvalue, ProdWeight, BoxWeight;
int pcs;
pcs = (mvalue - BoxWeight) / ProdWeight; Ez itt elvileg 1 (gyakorlatilag a pcs 0 lesz, mert 0.99999999 az eredmeny)
if (mvalue >= ProdWeight + BoxWeight) Ez itt nem igaz, holott 0.24 >= 0.24 a feltetel, vagyis egyenlo
--- delphi:
var
mvalue, boxweight, prodweight : real;
pcs : integer;
pcs:=round ((mvalue-boxweight) / prodweight); Ez itt tenyleg 1, gondolom a round jol mukodik...
if mvalue >= prodweight+boxweight then Ez itt igaz, vagyis egyenlo a ket "oldal"