Discuss Scratch
- Discussion Forums
- » Deutsch
- » Welche Grenzwerte gelten für Zahlen, Strings usw?
- koDoz
- Scratcher
42 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Treffen folgende Annahmen zu?
Maximale Stringlänge 100*2^10=102400 10*2^10=10240
Zahlen: -1e308 bis +1e308
Gelten weitere Grenzwerte?
–> kann ja dann zum Wiki-Artikel werden
Maximale Stringlänge 100*2^10=102400 10*2^10=10240
Zahlen: -1e308 bis +1e308
Gelten weitere Grenzwerte?
- Anzahl Listenfelder
- Länge von Listenfelder (=max Stringlänge?)
- Anzahl von Variablen und Listen a) pro Figur b) Bühne c) insgesamt
- Verschachtelungstiefe von Blöcken
- Verschachtelungstiefe von Schleifen
- Anzahl Klones (300 pro Figur? Projekr)
- Anzahl Figuren
- Dateigröße
–> kann ja dann zum Wiki-Artikel werden
Last edited by koDoz (June 30, 2014 16:12:22)
- TM_
- Scratcher
1000+ posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Wie sieht es mit Nachkommastellen aus?
Die Länge von 1/3 beträgt 18. Minus 2 wären das also 16 Nachkommastellen. Bei 1/6 sinds 17 Nachkommastellen, es scheint also bei periodischen Abfolgen ab der 16. Stelle aufzuhören. 1/7 hat aber auch nur 17 NKS. Es werden aber seltsamerweise in Variablen nur 6 NKS angezeigt. Mit dem Längeblock werden aber 17 angezeigt…
Die Länge von 1/3 beträgt 18. Minus 2 wären das also 16 Nachkommastellen. Bei 1/6 sinds 17 Nachkommastellen, es scheint also bei periodischen Abfolgen ab der 16. Stelle aufzuhören. 1/7 hat aber auch nur 17 NKS. Es werden aber seltsamerweise in Variablen nur 6 NKS angezeigt. Mit dem Längeblock werden aber 17 angezeigt…
- koDoz
- Scratcher
42 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
a) Bei Multiplikation werden max. 16 Nachkommastellen angezeigt. Bei Divisionen werden dagegen max nur 6 Nachkommastellen im Variablen-Anzeiger präsentiert. Möglicherweise wird die Zahl intern mit größerer Genauigkeit gespeichert.
b) Die Zahlenausgabe mit der Spruchblase unterscheidet sich zuweilen von der Variablenanzeige!
c) Habe mal einen einfachen Divisionstest programmiert: (1 / n * n) Bei den ersten 100.000 Zahlen führt das in ca. 13% aller Fälle zu Rundungsabweichung.
Interessant: Der erste ‘problematische Divisor’ ist 49. Das Rechnungs-Ergebnis von (1 / 49 * 49) wird als 0,999.999.999.999.999.9 angegeben. Die folgenden Problemteiler sind: 98, 103, 107, 161, 187, 196, 197, 206 … usw. Verdächtige Teiler wie 3, 7, 11 usw. werden dagegen problemlos geschluckt.
Vielleicht bring das einen Mathematiker auf den Plan
b) Die Zahlenausgabe mit der Spruchblase unterscheidet sich zuweilen von der Variablenanzeige!
c) Habe mal einen einfachen Divisionstest programmiert: (1 / n * n) Bei den ersten 100.000 Zahlen führt das in ca. 13% aller Fälle zu Rundungsabweichung.
Interessant: Der erste ‘problematische Divisor’ ist 49. Das Rechnungs-Ergebnis von (1 / 49 * 49) wird als 0,999.999.999.999.999.9 angegeben. Die folgenden Problemteiler sind: 98, 103, 107, 161, 187, 196, 197, 206 … usw. Verdächtige Teiler wie 3, 7, 11 usw. werden dagegen problemlos geschluckt.
Vielleicht bring das einen Mathematiker auf den Plan
Last edited by koDoz (June 23, 2014 11:37:56)
- forth
- Scratcher
15 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Das Rechnungs-Ergebnis von (1 / 49 * 49) wird als 0,999.999.999.999.999.9 angegeben.
Diese Rundungsabweichungen führen tatsächlich zu schwer auflösbaren Programmierfehlern. Diesen Frust hat wohl jeder junge Programmierer schon erlebt. Darum gleich ein paar einfache Strategien, um solche Probleme zu umschiffen:
a) Bei Berechnungen stets die Division als letztes Rechenglied angeben. Statt (1 / a * b) besser (1 * b / a)
b) Bei logischen Abfragen die das Ergebnis von Berechnungen auswerten, stets mit der Möglichkeit von Rundungsabweichungen rechnen:
if <(a) = (((b) / (c)) * (d))> then
Diese Aktion wird möglicherweise wg Rundungsabweichung nicht ausgeführt!
end
if <(a) > (((b) / (c)) * (d))> then
Durch Abfragen auf größer > oder kleiner < statt exakt gleich lassen sich viele Rundungsprobleme umgehen
end
Last edited by forth (July 1, 2014 17:23:53)
- Lenny12345
- Scratcher
24 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Ich habe über solche Grernzwerte in Scratch noch nie nachgedacht…
Na, ja Problem scheint ja nur bei größen Zahlen aufzutreten!
Na, ja Problem scheint ja nur bei größen Zahlen aufzutreten!
- koDoz
- Scratcher
42 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Vielleicht wichtig zu wissen, das
rechnerischen Ungenauigkeiten typisch für alle digitalen Rechnersystenem sind!
Es ist also voll normal, das der Programmierer lernt, mit den speziellen Begrenztheiten einer Programmiersprache umzugehen. Hilfreich wäre es natürlich, wenn solche typischen Grenzfälle gleich als solche bekannt gegeben werden -> Dann ist es auch kein Bug …
———————————
Übrigens: mit ein wenig Gehirnschmalz kann man Programmiersprachen überaschende Kunststückchen beibringen. Z.B stellt @quast hier seinen Multiplizierer vor, der beliebig lange Ziffernfolgen verarbeitet
Beispiel:
1234.69358483749578838834890110001011345
* 0.0010259384758798788834884858034503640
= 1.2667196546068443648352771979711692959333790007008256644217493050837958
rechnerischen Ungenauigkeiten typisch für alle digitalen Rechnersystenem sind!
Es ist also voll normal, das der Programmierer lernt, mit den speziellen Begrenztheiten einer Programmiersprache umzugehen. Hilfreich wäre es natürlich, wenn solche typischen Grenzfälle gleich als solche bekannt gegeben werden -> Dann ist es auch kein Bug …
———————————
Übrigens: mit ein wenig Gehirnschmalz kann man Programmiersprachen überaschende Kunststückchen beibringen. Z.B stellt @quast hier seinen Multiplizierer vor, der beliebig lange Ziffernfolgen verarbeitet
Beispiel:
1234.69358483749578838834890110001011345
* 0.0010259384758798788834884858034503640
= 1.2667196546068443648352771979711692959333790007008256644217493050837958
Last edited by koDoz (June 30, 2014 07:10:23)
- koDoz
- Scratcher
42 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Und was sagt Scratch (v420) zu der Rechnung?
say [1.27]
Last edited by koDoz (June 30, 2014 08:33:26)
- quast
- Scratcher
7 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Übrigens: mit ein wenig Gehirnschmalz kann man Programmiersprachen überaschende Kunststückchen beibringen. Z.B stellt @quast hier seinen Multiplizierer vor, der beliebig lange Ziffernfolgen verarbeitet…wobei “beliebig” letztlich auch auf die maximale Stringlänge bzw. die maximal erlaubte Listenlänge begrenzt ist. Das script macht ja nix anderes als “schriftlich” zu multiplizieren, so wie man es mal in der Schule gelernt hat. Lustig, das diese Methode am Ende mächtiger ist als das “normale” Rechnen des Computers. Danke für die Erwähnung @koDoz :)
- koDoz
- Scratcher
42 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Übrigens: mit ein wenig Gehirnschmalz kann man Programmiersprachen überaschende Kunststückchen beibringen. Z.B stellt @quast hier seinen Multiplizierer vor, der beliebig lange Ziffernfolgen verarbeitet…wobei “beliebig” letztlich auch auf die maximale Stringlänge bzw. die maximal erlaubte Listenlänge begrenzt ist. Das script macht ja nix anderes als “schriftlich” zu multiplizieren, so wie man es mal in der Schule gelernt hat. Lustig, das diese Methode am Ende mächtiger ist als das “normale” Rechnen des Computers. Danke für die Erwähnung @koDoz :)
Uuups! Da haben wir es wieder: beliebig lange Ziffernfolgen werden also von der maximalen Stringlänge begrenzt.
Bei Scratch(v420) wird die max. Stringlänge auf 102400 Zeichen geschätzt - das ist immerhin schon was!
Aber um ‘mal eben’ 1 Million Stellen der Kreiszahl PI zu ermitteln müsste man die Stellen in eine Liste schreiben.
1000 Zellen mit je 1000 Zeichen sollten schon gehen - bestimmt auch noch mehr - bis der Arbeitsspeicher überläuft
unbegrenzt ist also schnell gesagt, aber selten erreicht …
Last edited by koDoz (June 30, 2014 16:14:03)
- TM_
- Scratcher
1000+ posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Aber Listen können lang werden unabhängig vom Inhalt habe ich eine Liste mit über 1 Million erreicht, als ich sie versteckt habe und nach kurzer zeit wieder angezeigt habe, waren es fast 1,3 millionen Einträge, es ist kurz eingefroren und dann kam die Flash-Absturz-Meldung
Oh und zu deinem “Scratch sagt 2,7”, der Sage Block kürzt nocheinmal zusätzlich. Auch variablen zeigen seltsamerweise nicht immer alles an, wenn es sich um Kommazahlen handelt. Den exakt gespeicherten Wert erhälst du durch Klicken auf die Rechnung, dann zeigt ne kleine Sprechblase das Egebnis bzw den Wert des Blockes an
Oh und zu deinem “Scratch sagt 2,7”, der Sage Block kürzt nocheinmal zusätzlich. Auch variablen zeigen seltsamerweise nicht immer alles an, wenn es sich um Kommazahlen handelt. Den exakt gespeicherten Wert erhälst du durch Klicken auf die Rechnung, dann zeigt ne kleine Sprechblase das Egebnis bzw den Wert des Blockes an
- quast
- Scratcher
7 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Ich denke die maximale Länge ist 10240 (?) Maximale Stringlänge 100*2^10=102400
Ja, 300 stimmt Anzahl Klones (300 pro Figur?)
- Lirex
- Scratcher
500+ posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Meine Tests haben ebenfalls lediglich 10*2^10=10240 Zeichen ergeben.Ich denke die maximale Länge ist 10240 (?) Maximale Stringlänge 100*2^10=102400
Das Limit bezieht sich auf das gesamte Projekt, nicht auf Figuren. Bei mir werden maximal 301 Klone erzeugt.Ja, 300 stimmt Anzahl Klones (300 pro Figur?)
Last edited by Lirex (June 30, 2014 14:08:44)
- koDoz
- Scratcher
42 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Danke! Die kleine kleine Sprechblase halte ich für äußerst nützlich. … Oh und zu deinem “Scratch sagt 2,7”, der Sage Block kürzt nocheinmal zusätzlich. Auch variablen zeigen seltsamerweise nicht immer alles an, wenn es sich um Kommazahlen handelt. Den exakt gespeicherten Wert erhälst du durch Klicken auf die Rechnung, dann zeigt ne kleine Sprechblase das Egebnis bzw den Wert des Blockes an
Also dann fasse ich mal als Zwischenstand (v420) zusammen:
- Im Editor lässt sich der aktuelle Wert einer Variable durch Klick auf die Variable in der Variablenliste anzeigen. Max 16 Nachkommastellen - In einem Fall hab ich allerdings auch 19 Nachkommastellen gezählt!
- Die Sage- / Denke- / Frage-Befehle zeigen den Wert i.d.R bis 16 Nachkommastellen unverändert an.
- Der Befehl ‘zeig Variable’ (oder Haken in der Variablenliste) lässt den entsprechenden Variablen-Monitor auf der Bühne erscheinen.
- … der angezeigte Wert wird i.A. auf max. 6 Nachkommastellen gekürzt / gerundet - also ohne dezimale End-Nullen
- … bei Operanden in wissenschaftlicher Zahlendarstellung z.B. 1.23456e123 / 1.2 werden bis zu 14 Nachkommastellen angezeigt
- … Ausnahme: Das Ergebnis der Rechnung 10^(3) wird als 1000.00000000000007 angegeben
Möglicherweise ist in folgenden Versionen bzw. Online / Offline mit unterschiedlichen Anzeige-Werten zu rechnen. Das kann bei einigen Projekten natürlich schon mal ins Auge gehen …
Last edited by koDoz (July 2, 2014 11:27:47)
- LiFaytheGoblin
- Forum Moderator
1000+ posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Wo ist doch gleich der Wiki-artikel hierzu?
- fuenf
- Scratcher
44 posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Anzahl Cloudvariablen, Limit = 7 http://scratch.mit.edu/discuss/post/376960/
Verwendbar ab Benutzerstatus Scratcher (nicht neuer Scratcher!)
Verwendbar ab Benutzerstatus Scratcher (nicht neuer Scratcher!)
- Lirex
- Scratcher
500+ posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Interessant: http://scratch.mit.edu/projects/24934494/
- Dadiwiki
- Scratcher
100+ posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
http://scratch.mit.edu/projects/24934494/Ja, hab ich auch gesehen! Vor allem weil man dadurch (soweit ich das verfolgen konnte) 552950 Zeichen mehr als Cloud Speicher zur Verfügung hat (also 655350) Interessant:
- TM_
- Scratcher
1000+ posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
http://scratch.mit.edu/projects/24934494/Ja, hab ich auch gesehen! Vor allem weil man dadurch (soweit ich das verfolgen konnte) 552950 Zeichen mehr als Cloud Speicher zur Verfügung hat (also 655350) Interessant:
Ne, es geht noch mehr!
Ich habe ihn wegen der seltsamen Bechränkung gefragt und dann antwortete er, dass er es noch einmal getestet hat und diesmal eine Länge von 110000 speichern konnte! Beim letzen mal wurde so eine Zahl halt nicht im Cloud Log angezeigt und war nur lokal vorhanden (das heißt alle Strings können sehr viel länger sein), und daher dachte er, der Cloud Server hat ne absicherung … nun scheinbar doch nicht wie sein letzter Test zeigt
Yeah! Cloud-Data und ewige Leaderboards sind wieder in unserer Hand
- TM_
- Scratcher
1000+ posts
Welche Grenzwerte gelten für Zahlen, Strings usw?
Unglaubliche 1 Million Zeichen ….
- Discussion Forums
- » Deutsch
- » Welche Grenzwerte gelten für Zahlen, Strings usw?