[C++] 2 Fragen

Ich habe schon etwas ähnliches wie das hier programmiert:
Code:
class any : int {
    ...
}

int main(){
    any a = 5;
    int b = a;
}
aber das geht nicht, weil int keine Klasse ist...
Hat noch jemand Lösungsvorschläge?
 
Die boost::any Klasse ist nicht ganz so gut
Du hast offenbar nicht ganz verstanden wozu boost::any gedacht ist.
Code:
boost::any a = 5;
cout<<a;
und
Code:
boost::any a = 5;
int b = a;
geht z.B nicht...
Natürlich nicht. Du mußt boost::any_cast verwenden. (:rtfm: http://www.boost.org/doc/html/any.html)

Evtl. solltest du mal erläutern warum du das machen willst. C/C++ sind nicht umsonst typisierte Sprachen.

Gruß
 
Achso...
Kann man denn nicht eine Template-Klasse machen, die sich bei der ersten Zuweisung entsprechend anpasst?
Boost.any passt sich doch bei den Zuweisungen an.

Aber natürlich kannst du nicht Boost.any anstatt anderer Ausdrücke an beliebigen Stellen einsetzen.

Dazu müßte Boost.any für jeden beliebigen Typ Konvertierungsoperatoren definiert haben, was natürlich nicht machbar ist (und bei Mehrdeutigkeiten nicht funktionieren würde).

Du könntest die Boost.any Klasse natürlich dahingehend anpassen. Ob das sinnvoll ist steht auf einem anderen Blatt.

Gruß
 
Hi,

ich hab mal long double ausprobiert, aber ab einer bestimmten Zahl ist das nicht mehr genau...
Welche Zahl ist das?
Gibt es einen Typ, der so groß ist wie long double aber exakt bis zu dieser Zahl ist und dann aufhört?
 
Danke für die Zahl und den Link. :)

Matthias Reitinger hat gesagt.:
Aber mal im Ernst: du musst schon sagen, was du unter „genau“ verstehst.

Ich meine das genau wie in diesem Satz:
Fließkommazahlen können strukturbedingt nicht jede beliebige Zahl genau darstellen.

Kann man einen eigenen Typ erstellen, der mit den Bits des long double rechnet?
Ist das dann schneller / langsamer als die BigInt Klassen?

//edit: Verstehe ich das richtig, dass bis zur Zahl 42 die Ungenauigkeit bei ±1 liegt?
 
Zuletzt bearbeitet:
Kann man einen eigenen Typ erstellen, der mit den Bits des long double rechnet?
Sicher doch.

Ist das dann schneller / langsamer als die BigInt Klassen?
Das kommt auf die konkrete Implementierung an.

//edit: Verstehe ich das richtig, dass bis zur Zahl 42 die Ungenauigkeit bei ±1 liegt?
Nein. Das mit der 42 war ein Scherz (in Anspielung auf die universelle Antwort). Unter der Annahme, dass ein long double auf deinem System ein binary128 nach IEEE 754-2008 ist, sollte der Datentyp bis zur Zahl 2^113 - 1 = 10.384.593.717.069.655.257.060.992.658.440.191 eine Darstellungs-Ungenauigkeit von höchstens ±1 aufweisen. Für binary64 kannst du dir die Zahl entsprechend berechnen.

Aber kann es sein, dass du sowieso nur Ganzzahlen darstellen willst? Dann ist ein Fließkommatyp sowieso ungeeignet. Was genau passt dir denn an den BigInt-Klasen nicht?

Grüße,
Matthias
 
Das mit der 42 ist lustig! :D

Genau, ich will mit großen Ganzzahlen rechnen, wollte aber Standardtypen verwenden, um nicht eine ganze Klasse zu importieren...
 
Zurück