Ich benutze die boost::multiprecision-Bibliothek für Dezimal-Gleitkommazahlen und möchte zwei Gleitkommazahlen mit der angegebenen Genauigkeit vergleichen.
Allerdings scheint cpp_dec_float die Zahl nicht nur auf die angegebene Genauigkeit zu vergleichen, sondern auch die Wachposten-Ziffern einzuschließen:
#include
#include
//#include
typedef boost::multiprecision::number > flp_type;
int main(int argc, char* argv[])
{
// 50 Dezimalstellen
flp_type sqrt2("1.4142135623730950488016887242096980785696718753769");
// Enthält berechnete Wachposten-Ziffern
flp_type result(boost::multiprecision::sqrt(flp_type("2")));
// Die 50 Dezimalstellen Präzision sind tatsächlich gleich
std::cout << std::setprecision(50) << sqrt2 << std::endl;
std::cout << std::setprecision(50) << result << std::endl;
// Ich möchte, dass dies mit der angegebenen Präzision des Typs verglichen wird, nicht mit den Wachposten-Ziffern
std::cout << (result==sqrt2) << std::endl;
return 0;
}
Ausgabe:
1.4142135623730950488016887242096980785696718753769
1.4142135623730950488016887242096980785696718753769
0
Erwartet:
1.4142135623730950488016887242096980785696718753769
1.4142135623730950488016887242096980785696718753769
1
Ich habe versucht, mit precision() zu "trunkieren", aber ohne Erfolg. Gibt es eine Möglichkeit, die beiden Zahlen zu vergleichen, ohne auf Epsilon-Vergleiche zurückzugreifen?