Portál AbcLinuxu, 6. května 2025 01:25
Ř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.