Ich bekomme dieses Code-Schnipsel von einigen wo sonst. Laut dem Webmaster wird der Code von The art of computer programming by KnuthUnterschied zwischen ungefähr gleich und im Wesentlichen gleich in der Kunst der Computerprogrammierung
ausgewählt Da ich keine Kopie dieses Buches habe, darf ich wissen, was ist der Unterschied zwischen den beiden Funktionen?
bool approximatelyEqual(float a, float b, float epsilon)
{
return fabs(a - b) <= ((fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
bool essentiallyEqual(float a, float b, float epsilon)
{
return fabs(a - b) <= ((fabs(a) > fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
Kann ich sagen, im Wesentlichen wird Equal immer einen 'näher'-Wert als ungefähr gleich brauchen? –
Ja, 'im WesentlichenEqual'-Werte sind immer" näher "als" annäherndEqual "-Werte. – palswim
Denken Sie an die Angebote in Ihrem normalen Geschäft und welche Prozentsätze bedeuten dort. Was ist wertvoller 33% Rabatt im Preis oder 33% extra kostenloses Produkt? Die Lösung ist, dass Sie den 33% Rabatt bevorzugen sollten, da dies einem 50% extra kostenlosen Produktangebot entspricht. Das gleiche passiert hier, abhängig davon, ob Sie das Epsilon um den größeren oder kleinsten der beiden Werte ziehen, wird das Ergebnis unterschiedlich sein. 66,6 ist ungefähr gleich 100 mit einem 33% Epsilon, aber nur im Wesentlichen gleich mit einem 50% Epsilon. –