aus wie vielen ziffern besteht eine zahl???
-
ness schrieb:
Funktioniert der code?
getestet und für gut befunden.
-
Cool. Weil, als ich angefangen hab wollte ich mal ne Klasse für rationale Zahlen schreiben und der nen Konstruktor spendieren, der double erwartet... Irgendwie funktioniete das nicht... Ich wandte mich ans Forum:
http://www.c-plusplus.net/forum/viewtopic.php?t=84211&start=0&postdays=0&postorder=asc&highlight=
-
ness schrieb:
Cool. Weil, als ich angefangen hab wollte ich mal ne Klasse für rationale Zahlen schreiben und der nen Konstruktor spendieren, der double erwartet... Irgendwie funktioniete das nicht... Ich wandte mich ans Forum:
http://www.c-plusplus.net/forum/viewtopic.php?t=84211&start=0&postdays=0&postorder=asc&highlight=Naja, die in dem Post haben schon recht, Fließkommaarithmetik ist doch ein bischen komplizierter...
-
Was heißt das jetzt im Bezug auf die vorgeschlagene Lösung?
-
ness schrieb:
Was heißt das jetzt im Bezug auf die vorgeschlagene Lösung?
geht manchmal, geht manchmal nicht. Wenn die Anzahl der Kommastellen immer kleiner einer gekannten Zahl wären (z.B. 5) wäre könnte man es mit einem unscharfen Vergleich lösen:
while !(z_i < z_d + 0.000001 && z_i > z_d - 0.000001)
Einfach mal testen für Zahlen kleiner 5 Kommastellen
-
Um jetzt auch mal nen sinnvollen Beitrag zu leisten: Geht sowas nicht (jetzt mal schnell zusammengeschustert):
long double get_max_long_double_precision() //gibts dafür was in limits.h? { long double e=0.1; static bool i=false; if(!i) { for(long double d=1;e<d&&e!=0;d=e,e/=10); i=true }; if(e) return e; else return d; }; unsigned max_fltp(double d) { long double z_d; int z_i; z_d = static_cast<long double>(d); z_i = z_d; unsigned counter = 0; long double m=get_max_long_double_precision(); while (!(z_i < z_d + m && z_i > z_d - m)) { z_d *= 10; z_i = z_d; counter++; }; return counter; };
Immer unter der voraussetzung, das long double genauer ist als double...:xmas1: :xmas2: (Weihnachtssmileys posten wird ein neuer trend-Sport
:xmas2: :xmas1: )
-
mmer unter der voraussetzung, das long double genauer ist als double..
zu meinwr schande muss ich eingestehen das ich solche konstrukte wie long double gar nicht kannte
:xmas2:
geht auch
unsigned float long double
was macht sowas eigentlich? :xmas1: :xmas1: :xmas1:
-
Ne. Du kannst dir das wie eine Tabelle vorstellen:
static const volatile unsigned long int signed short double /*garnix*/
Von denen was untereinander steht kannst du immer nur eins nehmen, und es muss was aus der letzten Spalte oder float gewählt sein... Wobei du aber bedenken musst, dass short double float genannt wird (wieso das eigentlich?).
:xmas1: :xmas2:
-
Na da will ich doch auch mal meinen mehr oder weniger sinnvollen Beitrag leisten^^
#include <conio.h> #include <iostream.h> #include <vcl.h> void main() { long zahl; cout << "Eingabe : "; cin >> zahl; AnsiString boing = zahl; cout << "Zifferanzahl : " << StrLen(boing.c_str()); getch(); }
-
Gast221212 schrieb:
kx-unix schrieb:
aus sovielen kommastellen, wie oft man die Zahl mit 10 multiplizieren kann und sie nicht ganzstellig wird
????
double z_d; int z_i; z_d = 9.23443; z_i = z_d; int counter = 0; while (z_d != z_i) { z_d *= 10; z_i = z_d; counter++; } cout << "Kommastellen: " << counter << endl;
Die while Schleife wir doch nicht ausgeführt oder? Denn
9.23443 == 9.23443
und nicht
9.23443 != 9.23443MfG CSS
-
die schleife wird durchaus ausgeführt. sieh dir den typ von z_i nochmal an, dann sollte es eigentlich klar sein
-
Um himmels willen!!! Nein!!! Nicht!!! Bäääääh! Nicht doch double in int umwandeln, nein!!! Tu sowas nicht! Das wird Schande über euch bringen! Wenn Ganze Zahlen, dann bitte __int64 mindestens!