Portál AbcLinuxu, 30. října 2025 13:51
Řešení dotazu:
Pro jistotu: …že je jeho absolutní hodnota menší…
Ad "třeba než 10E-5": (1) 10E-5 se obvykle píše spíš jako 1E-4 (což je docela dost). (2) U skutečných úloh je odhadování chyb mnohem komplikovanější než že podívám z okna a plácnu od oka nějaké číslo. Tady ale zadání vypadá tak uměle, že to až smrdí domácím úkolem, takže je to asi jedno.
a + b == c" a "a == c - b" může dát výrazně odlišné výsledky. Pokud bych to chtěl dělat opravdu pořádně, spíš bych se snažil spočítat horní odhad zaokrouhlovací chyby a použít ten.
bool, v C++ by se zase mělo použít std::abs() místo fabs().
stdbool.h a protože jde zřejmě o začátečnický dotaz, přišlo mi vhodné na to upozornit. Co se podpory C99 týče, třeba MSVC úplnou podporu standardního C99 pořád nemá.
essentiallyEqual(a, 0, epsilon) bude totéž co "a == 0" a pro epsilon < 1 i approximatelyEqual(a, 0, epsilon).
"%.2Lf", a poté jen řetězce porovnáš funkcí strcmp.
Z https://bitbashing.io/comparing-floats.html
bool relativelyEqual(float a, float b,
float maxRelativeDiff = FLT_EPSILON)
{
const float difference = fabs(a - b);
// Scale to the largest value.
a = fabs(a);
b = fabs(b);
const float scaledEpsilon =
maxRelativeDiff * max(a, b);
return difference <= scaledEpsilon;
}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.