Abschätzungsaufgabe
-
Guten Morgen,
main () { float zahl; int index, ergebnis; for(index = 1; index < 51; index++) { ergebnis = zahl / 10; printf("\n%e", ergebnis); } getch(); }
Dieses Programm ist gegeben und es soll ohne Computer abgeschätzt werden wie klein die Zahl wird, die dort berechnet wird. Einen Taschenrechner steht selbstverständlich zur Verfügung.
Musterlösung: 10^{-45}
Mein Ergebnis ist einfach: 1.111111 / 10^50 = 1.111111*10^{-50} Aber ich sehe gerade, das ist ja ungefähr der gleiche Wert oder?
Gruß juniorcrew
-
zahl wurde nicht initialisiert. ergebnis bekommt immer den gleichen wert zugewiesen. Alles bullshit.
-
Mein Fehler, da muss beim abtippen etwas verloren gegangen sein *g*
main () { float zahl = 1.111111; int index; for(index = 1; index < 51; index++) { zahl = zahl / 10; printf("\n%e", zahl); } getch(); }
-
geraten: zahl ^(2-49)
-
;fricky schrieb:
geraten: zahl ^(2-49)
^^ ne, besser so: zahl * 10^-47
-
Aber ich sehe gerade, das ist ja ungefähr der gleiche Wert oder?
Nein die Unterschiede betragen etwa 10^5, das ist ein Faktor von 100.000.
-
Alle falsch.
Am besten ist "Mein Ergebnis ist einfach: 1.111111 / 10^50 = 1.111111*10^{-50}". Die Schleife wird 50 mal durchlaufen und dabei wird jedesmal durch 10 geteilt.
Richtig ist aber 0. Denn float kann doch nur bis 1.5e-45 runter. Will man die 1.111111e-50 sehen, muß man schon double nehmen.
Was sich Herr Musterlösung gedacht hat, ist mir nicht begreiflich.
-
volkard schrieb:
Richtig ist aber 0. Denn float kann doch nur bis 1.5e-45 runter.
woher willste wissen, was die für fette floats benutzen? oder ist die breite von float im C-standard auf 4 bytes festgenagelt?
-
Ich Realist. Du Pedant.
-
volkard schrieb:
Ich Realist. Du Pedant.
naja, aber wenn einer antwortet: '0 kommt raus, weil float sowas nicht verkraftet', dann hat er vielleicht gleich seine punktzahl für die aufgabe genannt. wenn er pech hat, wollen die sowas garnicht hören (obwohl's richtig ist). *schluchz*
-
http://www.pedant.de/
fast so gut wie www.igtfy.com
-
Schätze, es ging um die ungewöhnliche Anlage der for- Schleife, um eine "miss- by- one"- Antwort zu provozieren.
War also nicht Dein Glückstag, fricky
Der Rest iss ja nur Mathe, daß man "/10" mit "*=.1" bzw. z * 10^(-1 * 50) zusammenkriegt.IMHO ist der genaue Wertebereich von float eh' nicht definiert, kann also bei Compilern funzen, die float immer double- mäßig behandeln.
-
pointercrash() schrieb:
Schätze, es ging um die ungewöhnliche Anlage der for- Schleife, um eine "miss- by- one"- Antwort zu provozieren.
ich schätze, das war mal ein pascal- oder fortran-code, wo arrays-indizes mit 1 beginnen und floats auch öfter runtergeteilt werden können, ohne dass sie gleich schlapp machen.