Moeki Geschrieben 15. Oktober 2004 Teilen Geschrieben 15. Oktober 2004 Hallo. Ich bin Student für Lehramt an Gymnasien mit der Fächerkombination Informatik und Politische Bildung im ersten Fachsemester. Demzufolge muss ich auch die Veranstaltung Mathematik für Informatiker 1 besuchen. Wöchentlich muss wir hier eine Aufgaben auf einem Lösungszettel lösen und bewerten lassen. Langer Rede kurzer Sinn: Ich komme mit allen 3 Aufgaben klar, ausser folgender. Mathe hatte ich in der Oberstufe das Letzte mal vor 4 Jahren, auch meine Mitstudenten kommen net weiter. Also hier die Aufgabe und nachfolgend meine Lösungsansätze, wobei ich aber Schwierigkeiten mit der Formulierung einer allgemeinen Formel habe. Das Produkt zweier natürlicher Zahlen x und y kann auf die folgende Weise gebildet werden. Man ersetze x durch die grÅ¡oßte ganze Zahl x1, die bei Division von x durch 2 mit Rest entsteht und y durch y1 = 2y. Nun wird x1 durch die grÅ¡oßte ganze Zahl x2 ersetzt, die bei Division von x1 durch 2 mit Rest entsteht und y1 durch y2 = 2y1. Nach n Schritten erhÅ¡alt man xn = 1 und yn = 2ny. Nun streiche man alle yi, fÅ¡ur die xi eine gerade Zahl ist. Die Summe der verbleibenden yi ergibt das Produkt x · y. (a) Demonstrieren Sie diesen Algorithmus durch 2 Beispiele! ( Begründen Sie, warum der Algorithmus auf das Produkt x · y führt. © Schreiben Sie in einer geeigneten Programmiersprache ein Programm, das diesem Algorithmus folgt. Bei erfolgreicher Bearbeitung kann das Programm nach Absprache mit dem Å¡Ubungsleiter in der Å¡Ubung vorgefÅ¡uhrt werden. (Zusatzpunkt) x, y € |N x*y = ? x1 = x div 2 y1 = 2 y usw. bis xn = 1 und yn = 2 hoch n * y alle yi streichen, wenn xi gerade (x mod 2 = 0) summe yi = x*y Weiter komme ich leider nicht. wobei meine vorgehensweise natürlich funktioniert, allerdings ohne formel. :,-( Danke für eure Hilfe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 16. Oktober 2004 Teilen Geschrieben 16. Oktober 2004 Da ich im Folgenden viele mathematische Zeichen verwende, nutze ich die LaTeX-Schreibweise, um die Lesbarkeit zu gewährleisten. Zuerst einmal sind x,y \not\in\mathbb{N}. x,y\in\mathbb{Q}, denn \mathbb{N} bezeichnet die natürlichen Zahlen, also (0,)1,2,3,4,... Ob man die 0 nun hinzunimmt oder nicht ist Geschmackssache und ist hier ja auch nicht das Thema. Die ganzen Zahlen \mathbb{Q} beinhalten auf jeden Fall die 0 und zusätzlich zu den positiven Zahlen, auch die negativen, also: 0,1,-1,2,-2,... Zusammen mit der Multiplikation bildet die Menge \mathbb{Q} eine Gruppe, das bedeutet insbesondere, dass die Multiplikation abgeschlossen ist: \forall x,y: x*y\in\mathbb{Q}. Damit hast du schon mal den ersten Schritt getan, dass Ergebnis einer Multiplikation innerhalb von \mathbb{Q} liegt. Bei einer Folge von x_1,...x_n für die gilt, dass alle Glieder gerade sind bis auf das letzte Element (dies muss 1 sein) (x=2^n,n\in\mathbb{N}) ist klar, warum das Verfahren funktioniert: Die Multiplikation wird auf 2*2...*2 (insgesamt n-Mal) aufgeteilt. n-Mal *2 rechnen ist aber 2^n (und das ist wiederum der Ausgangswert x). Bei Auftreten von ungeraden x_i gilt, dass alle nachfolgenden x_{i+1}, ... auch ungerade sind. Ein Beispiel: 30 * 3 = 90 ------- 15 6 7 12 3 24 1 48 -------- = 90 In diesem Fall ist es also keine reine Umformung mehr, da 1*48\not= 90 ist. Es haben sich Rundungsfehler eingeschlichen, denn wir haben die 0.5,0.75,0.875 bei 7,3,1 "unterschlagen" in dem wir den Rest nicht berücksichtigt haben. Dabei ist der Rundungsfehler der aktuellen Zahl genauso groß wie die darüberstehenden Zeilen mit ungeradem x aufsummiert. Auf das Beispiel bezogen: 3*24 müsste ja eigentlich 3.75*24 lauten. 0.75*24= 18, 12+6= 18. Das gleiche gilt für 0.875*48=42. Diesen Rest müssen wir also aufsummieren, um auf das richtige Ergebnis zu kommen, bei geraden Zahlen existiert dieser Rundungsfehler aber nicht, weshalb wir diese Zeilen wegstreichen können. Ich hoffe, das war jetzt einigermaßen verständlich die Aufgabe ( eigentlich viel zu viel davon, denn ich sollte sie ja eigentlich nicht lösen. Aufgabe (a) ist ja einfach nur ne Anwenung mit Zettel und Stift, das sollte klar sein. Aufgabe © ist eine 1zu1 Umsetzung des Algorithmus in eine Programmiersprache, dazu sage ich auch nichts. Übrigens: Dieses Verfahren heißt Russische Multiplikation. HTH Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Moeki Geschrieben 16. Oktober 2004 Autor Teilen Geschrieben 16. Oktober 2004 aha. und gibt es dafür auch ne allgemein gültige formel? vielen dank soweit. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 17. Oktober 2004 Teilen Geschrieben 17. Oktober 2004 und gibt es dafür auch ne allgemein gültige formel? Was meinst du jetzt genau damit? Wofür suchst du genau eine Formel? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Moeki Geschrieben 17. Oktober 2004 Autor Teilen Geschrieben 17. Oktober 2004 Na für diesen Algorithmus :-) so dass ich den dann in einer Programmiersprache umsetzen kann. Oder kann ich die bechriebenen Abläufe als Algorithmus gelten lassen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 Den beschrieben Ablauf darfst du als Algorithmus gelten lassen. Ein Algorithmus ist ja nicht nur eine geschlossene Formel. Wikipedia hat eine Erklärung, was ein Algorithmus ist: http://de.wikipedia.org/wiki/Algorithmus Ich habe sie mir jetzt nicht durchgelesen, aber normalerweise sind die Beiträge bei Wikipedia ganz brauchbar. HTH Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 Na für diesen Algorithmus :-) so dass ich den dann in einer Programmiersprache umsetzen kann. Oder kann ich die bechriebenen Abläufe als Algorithmus gelten lassen? Das Teilen der xi Werte ist ein Bit-Shift nach Rechts. Das Verdoppeln von yi ein Schift nach links. Danach machst Du einen Test auf das Recht Bit von xi(entspricht der gerade/ungerade Entscheidung) und wenn das Bit gesetzt ist (Zahl ist gerade), dann addierst Du den Inhalt des Registers/der Variable yi zum Zwischenergebnis. Nicht vergessen, das Zwischenergebnis mit 0 zu initialisieren und die erste Zeile (i=1, also die Eingabe) ebenfalls zu berücksichtigen. Für die Multiplikation brauchst Du also nur die Addition, einen Bit-Test und Bit-Shifts als zugrundeliegende Operationen. Ich hoffe das hilft und verwirrt nicht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 Das Teilen der xi Werte ist ein Bit-Shift nach Rechts. Das Verdoppeln von yi ein Schift nach links. Danach machst Du einen Test auf das Recht Bit von xi(entspricht der gerade/ungerade Entscheidung) und wenn das Bit gesetzt ist (Zahl ist gerade), dann addierst Du den Inhalt des Registers/der Variable yi zum Zwischenergebnis. Nicht vergessen, das Zwischenergebnis mit 0 zu initialisieren und die erste Zeile (i=1, also die Eingabe) ebenfalls zu berücksichtigen. Für die Multiplikation brauchst Du also nur die Addition, einen Bit-Test und Bit-Shifts als zugrundeliegende Operationen. Ich hoffe das hilft und verwirrt nicht Was aber immer noch ein Algorithmus ist und keine Formel. Und keine schöne Beschreibung für einen Algorithmus, weil du Implementationsdetails in den Algorithmus einfließen lässt. Errata: Moecki: Ich habe am Samstag am Vormittag einen Fehler gemacht. Ich hatte aus irgendeinem Grund gelesen, dass x,y \in\mathbb{Q} also ganze Zahlen sein sollen. Beim nochmaligen Draufschauen eben habe ich festgestellt, dass es natürliche Zahlen sein sollen. Damit hattest du Recht, als du schriebst, dass x,y\in\mathbb{N} sind. Sorry... Bis denn dann Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 Die "Formel" wäre "Ergebnis=x*y". Aber genau die Operation "*" soll ja mit einem Algorithmus (dem beschriebenen) umgesetzt werden. Fordern wir für den Algorithmus nun eine Formel, würden wir uns im Kreis drehen . Letzlich aber alles eine Frage der Definition Implementationsdetails sind keine wirklichen drin, ich habe es nur etwas vereinfacht, was ihm vielleicht bei der Umsetzung hilft (Zwischensumme statt dem Streichen von Zeilen und Aufsummieren der Übrigen). Die Multiplikation mit Shift zu machen ist IMO wichtig, denn wenn man y=y[i-1]*2 rechnet, hätte man wieder eine Multiplikation drin (wer will hier schon rekursiv werden? ), und genau die Multiplikation soll ja beschrieben werden. Analog die Division: Teilen durch 2 am besten vermeiden und durch Rechts-Shift ersetzen. Das mit dem möglichst kleinen Divisionsrest (der größten Zahl die bei Division mit dem kleinstem Rest entsteht) erübrigt sich so auch automatisch. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 Aber genau die Operation "*" soll ja mit einem Algorithmus (dem beschriebenen) umgesetzt werden. Fordern wir für den Algorithmus nun eine Formel, würden wir uns im Kreis drehen . Letzlich aber alles eine Frage der Definition Das stimmt so nicht. Es ist ein Algorithmus für russische Bauern (ich glaube, so geht die Geschichte zu diesem Algorithmus), die eine Multiplikation für beliebige Multiplikanten nicht ausführen können. Sehr wohl aber eine Zahl verdoppeln können. Auf jeden Fall ist es ein Algorithmus und keine Definition, weshalb auch auf die Multiplikation zurückgegriffen werden kann. Implementationsdetails sind keine wirklichen drin, ich habe es nur etwas vereinfacht, was ihm vielleicht bei der Umsetzung hilft (Zwischensumme statt dem Streichen von Zeilen und Aufsummieren der Übrigen). Die Multiplikation mit Shift zu machen ist IMO wichtig, denn wenn man y=y[i-1]*2 rechnet, hätte man wieder eine Multiplikation drin (wer will hier schon rekursiv werden? ), und genau die Multiplikation soll ja beschrieben werden. Analog die Division: Teilen durch 2 am besten vermeiden und durch Rechts-Shift ersetzen. Das mit dem möglichst kleinen Divisionsrest (der größten Zahl die bei Division mit dem kleinstem Rest entsteht) erübrigt sich so auch automatisch. Aber selbstverständlich sind Implementationsdetails vorhanden! Was ist denn bitte schön ein shift nach links bzw. rechts? Er hat die Semantik einer Multiplikation/Division. Abgesehen davon ist auf den natürlichen Zahlen kein Shift-Operator definiert, dieser kommt aus der Informatik und nicht aus der Mathematik und ist damit doch ein Implementationsdetail. Übrigens: was mache ich denn mit Programmiersprachen, die keinen Shift-Operator mitbringen? Dass die shift-Geschichte völlig unwichtig ist, habe ich weiter oben in diesem Post geschrieben: Ein Algorithmus ist keine Definition, weshalb die Verwendung der Multiplikation erlaubt ist. HTH Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 Hallo Jan, Es ist ein Algorithmus für russische Bauern (ich glaube, so geht die Geschichte zu diesem Algorithmus) Die Geschichte kenne ich nicht, aber ich vermute die Aufgabe wurde gestellt, um zu zeigen, das man die Multiplikation zweier ganzer positiver Zahlen (x*y) mit geringerem Aufwand durchführen kann, als z.B. x einfach y-mal aufzuaddieren. Auf jeden Fall ist es ein Algorithmus und keine Definition, weshalb auch auf die Multiplikation zurückgegriffen werden kann. Habe nie bestritten, das es ein Algorithmus ist und man das beschriebene Verfahren auch als solches bezeichnen sollte. Multiplikation als gegeben vorauszusetzen finde ich hier unsinnig. Es ist ja grade ein Algorithmus für die Multiplikation, der implementiert werden soll. Dann eher Verdopplung mittels Addition. Ich finde das Nette am Weg mit den Shifts ist grade, das man das Divisions-Problem so auch bequem lösen kann. Aber selbstverständlich sind Implementationsdetails vorhanden! Gut, man kann es als Kochrezept nehmen. Die Aufgabenstellung war aber auch schon recht detailiert. Es ist aber keine abgabefertige Lösung mit Sourcecode. Ich ging davon aus, das er etwas präzisere Hilfe möchte. Er hat die Semantik einer Multiplikation/Division Nicht wirklich. Pro geshiftetem Bit ist nur Verdoppelung/Division ohne Rest durch 2 möglich. Abgesehen davon ist auf den natürlichen Zahlen kein Shift-Operator definiert Du verwechselt eine Darstellungsform (hier binär) mit einer Menge an Zahlen (hier den natürlichen). N kann dezimal, binär, octal, hexadezimal, ... dargestellt werden. dieser kommt aus der Informatik und nicht aus der Mathematik und ist damit doch ein Implementationsdetail Ist als mathematische Operation beschreibbar. Übrigens: was mache ich denn mit Programmiersprachen, die keinen Shift-Operator mitbringen? Es ist eine Übungsaufgabe, kein reales Problem. Dass die shift-Geschichte völlig unwichtig ist Für eine einfache Umsetzung vom Algorithmus ist der Shift-Operator verzichtbar, bzw. hier durch Division ohne Rest und Verdoppelung ersetzbar. Für das Verständnis, warum ein solcher Algorithmus in dieser Form sinnvoll sein kann, ist sie jedoch IMO sinnvoll. Da ich nicht in seiner Vorlesung/Übung war, weiss ich nicht, was die Macher der Aufgabe für eine Lösung erwarten. Daher kann ich nur einen Lösungsweg anbieten, der mir zusagt und in diesem Fall spontan eingefallen ist. Es ist allerdings schon denkbar, das nur etwas einfacherers gefordert war, denn gestern war für ihn evtl. erst der erste Tag der Vorlesungszeit. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Glen Coe Geschrieben 19. Oktober 2004 Teilen Geschrieben 19. Oktober 2004 @Orffi: Deinen angegebenen Erklärungsansatz bezüglich der Aufgabe kann ich nicht verstehen. Erstmal halte ich Latex für nicht ganz so übersichtlich wie du es anscheinend tust und weiterhin lassen die fehlenden Absätze die Augen sehr schmerzen. Das allein wäre aber noch zu vertreten, wenn der Lösungsansatz wenigstens zu begreifen wäre. Aber erstens benutzt du als Nachweis Zahlenbeispiele (und verspielst damit den allgemeinen Ansatz) und dann kann ich deiner 2*2*... Begründung überhaupt nicht folgen. :confused: Deine Kritik an Bubbles "Implementierungsdetails" für diesen Algorithmus unterstütze ich jedoch voll und ganz. @Bubble: So leid es mir tut, aber ich glaube, dass Orffi den Nagel auf den Kopf trifft. Für den Algorithmus, wie er hier gefordert wird, halte ich die Angabe von Schiebeoperationen (und vor allem die Vehemenz, mit der du sie verteidigst) oder auch die Angabe, welches Bit dafür zuständig ist, ob die Zahl grade/ungrade ist und wie das getestet wird, für absolut überflüssig... im Gegenteil sogar für äusserst verwirrend. @Moeki: Ich bin mir nit sicher, ob du das Prinzip an sich bereits verstanden hast? Hier mal zwei Beispiele: 5 * 3 2 * 6 <- diese Zeile streichen 1 * 12 ==== 3 + 12 = 15 12 * 12 <- diese Zeile streichen 6 * 24 <- diese Zeile streichen 3 * 48 1 * 96 ==== 48 + 96 = 144 Diese Beispiele sind dafür gedacht, das Prinzip zu verstehen... für deine Lösung solltest du eigene verwenden & nachrechnen, damit du es wirklich begreifst. Dann noch zum Algorithmus selber. Ich gebe mal einen an, wie ich es persönlich machen würde: Setze Resultat = 0 Wiederhole { Wenn "x ist ungerade" Resultat = Resultat + y; Wenn "x ist gleich 1" Beende Schleife; x = x div 2; y = y * 2; } Anmerkung: Ob nun "ist ungerade" als "if( x & 1 )" oder "if( x % 2 )" oder "if( IsOdd(x) )" implementiert ist, ist absolut unerheblich für die Wirksamkeit. Und die Herleitung? Hm... ich weiss nicht ganz sicher, was bei euch verlangt wird. Ich gebe mal nicht alles mit Vor/Neben-bedingungen usw. an, sondern nur _meinen_ Rechenweg (der genauso auch falsch sein kann!) Der jeweils nächste Schritt bei der Multiplikation von x und y wäre nach diesem Algorithmus: (x / 2) * (y * 2) Wir unterscheiden zwei Fälle: 1) x ist eine gerade Zahl: (x = 2n) ( x / 2) * (y * 2) = (2n / 2) * (y * 2) = n * (y * 2) = 2*n*y 2) x ist ungerade (x = 2n+1) ( x / 2) * (y * 2) = ((2n+1) / 2) * (y * 2) = ( n + 1/2 ) * (y * 2) = (n * y * 2) + (1/2 * y * 2) = 2*n*y + y | +-> Wir sehen also, dass diese noch fehlende y später dazu addiert werden müssen... was eben mit der Streichung der "graden" Zeilen und Mitaddierung der "Ungeraden" passiert. Gruss, Glen Coe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 19. Oktober 2004 Teilen Geschrieben 19. Oktober 2004 Hallo Jan, Habe nie bestritten, das es ein Algorithmus ist und man das beschriebene Verfahren auch als solches bezeichnen sollte. Deine Bemerkung, dass hier keiner rekursiv werden wil, hatte ich zum Anlass genommen, deutlich zu machen, dass der Algorithmus die Multiplikation nicht definiert. Multiplikation als gegeben vorauszusetzen finde ich hier unsinnig. Es ist ja grade ein Algorithmus für die Multiplikation, der implementiert werden soll. Dann eher Verdopplung mittels Addition. Ich finde das Nette am Weg mit den Shifts ist grade, das man das Divisions-Problem so auch bequem lösen kann. Das ist ein Standpunkt, den ich nicht unbedingt Teile. Wir beide können beide im Kopf multiplizieren, aber irgendwann wird es ein wenig umständlich, so dass wir einen Taschenrechner verwenden. Wenn wir keinen Taschenrechner oder Computer zur Hand haben, müssen, wir das Ergebnis mit Zettel und Stift berechnen. Dazu kann es natürlich mehrere Möglichkeiten geben, aber dies ist ein Weg, den wir gehen können, um das Ergebnis trotzdem zu erhalten. Gut, man kann es als Kochrezept nehmen. Die Aufgabenstellung war aber auch schon recht detailiert. Es ist aber keine abgabefertige Lösung mit Sourcecode. Ich ging davon aus, das er etwas präzisere Hilfe möchte. Ich hatte ihn so verstanden, dass er glaubte, eine Formel zu benötigen, um ein Programm zu schreiben. Ich hatte deine Antwort darauf gedeutet, dass das es eine Formel sein soll. Was es nicht ist, sondern ein Algorithmus mit unnötigen Implementationsdetails. Nicht wirklich. Pro geshiftetem Bit ist nur Verdoppelung/Division ohne Rest durch 2 möglich. Ja, da hast du recht, es war verkürzt das, was ich meinte, aber du hast recht, meins war Mehrdeutig formuliert. Du verwechselt eine Darstellungsform (hier binär) mit einer Menge an Zahlen (hier den natürlichen). N kann dezimal, binär, octal, hexadezimal, ... dargestellt werden. Nein, ich verwechsel da sicher nichts! Wir bewegen uns nicht in der Informatik, sondern in der Mathematik. Und wenn man sich die Defintionen (es gibt mindestens zwei) anschaut, wie die Menge der natürlichen Zahlen aufgebaut ist (Peano-Axiome), dann kann man erkennen, dass von einer Darstellungsform nicht die Rede ist. Du müsstest den shift-Operator schon auf die Zahl "10" anwenden und nicht auf "1010". Ist als mathematische Operation beschreibbar. Ja und? natürlich ist der shift-Operator als mathematische Operation beschreibbar. Trotzdem ist der shift-Operator auf natürliche Zahlen nicht definiert. Mathematik abstrahiert von der Speicherung der Zahlen. Für eine einfache Umsetzung vom Algorithmus ist der Shift-Operator verzichtbar, bzw. hier durch Division ohne Rest und Verdoppelung ersetzbar. Für das Verständnis, warum ein solcher Algorithmus in dieser Form sinnvoll sein kann, ist sie jedoch IMO sinnvoll. Da ich nicht in seiner Vorlesung/Übung war, weiss ich nicht, was die Macher der Aufgabe für eine Lösung erwarten. Daher kann ich nur einen Lösungsweg anbieten, der mir zusagt und in diesem Fall spontan eingefallen ist. Es ist allerdings schon denkbar, das nur etwas einfacherers gefordert war, denn gestern war für ihn evtl. erst der erste Tag der Vorlesungszeit. Es geht hier nicht um einfach oder nicht. Und wenn ich den Algorithmus implementieren müsste, würde ich vielleicht auch auf den shift-Operator zurückgreifen. (Vielleicht nur deshalb, weil moderne Compiler im Zweifelsfall meine Multiplikation (mal zwei) in eine shift-Operation umsetzen, darum brauche ich mich nicht zu kümmern.) Es geht eher darum, dass es bei einer Beschreibung nicht auf das shift ankommt. Wenn jemand, dem du den Algorithmus erklärst, darauf kommt, dass er den shift-Operator verwenden kann, dann ist es in Ordnung, nur sollte er nicht schon bei der Beschreibung verwendet werden. Bis denn dann Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 19. Oktober 2004 Teilen Geschrieben 19. Oktober 2004 @Orffi: Deinen angegebenen Erklärungsansatz bezüglich der Aufgabe kann ich nicht verstehen. Erstmal halte ich Latex für nicht ganz so übersichtlich wie du es anscheinend tust und weiterhin lassen die fehlenden Absätze die Augen sehr schmerzen. Das allein wäre aber noch zu vertreten, wenn der Lösungsansatz wenigstens zu begreifen wäre. Aber erstens benutzt du als Nachweis Zahlenbeispiele (und verspielst damit den allgemeinen Ansatz) und dann kann ich deiner 2*2*... Begründung überhaupt nicht folgen. :confused: Absätze: Ich werde mich bessern. Genereller Ansatz: Da hast du in der Tat recht, mit einem Beispiel kann man nicht auf die Allgemeinheit schließen. Das wollte ich auch gar nicht. Es sollte als Beispiel dienen, dass es darum geht, die Rundungsfehler aufzusummieren. LaTeX: Ich gebe zu, dass es vielleicht nicht der optimalste Weg ist, aber da in diesem Forum nur "normale" Zeichen möglich sind, ist LaTeX meiner Meinung nach, die beste Lösung. Aber ich nutze auch LaTeX täglich, weshalb es mir wohl einfacher fällt in LaTeX-Notation zu denken. 2*2*2...: Ich wollte eigentlich nur sagen, dass bei 2^n *x Die Zahl x n-mal verdoppelt wird. und 2*...*2 = 2^n ist. Bis denn dann Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 19. Oktober 2004 Teilen Geschrieben 19. Oktober 2004 Ich hatte ihn so verstanden, dass er glaubte, eine Formel zu benötigen, um ein Programm zu schreiben. Der Lösungsweg ist ihm in der Aufgabe gegeben und auch so wie beschrieben umsetzbar, in einigen Hochsprachen leichter als in anderen. Etwas entzerrt ist der beschriebene Algorithmus jedoch IMO einfacher umsetzbar. In dieser Richtung wollte ich helfen. Ich möchte keineswegs auf der Verwendung vom Bit-Shift herumreiten. Ich wollte damit lediglich eine Verbindung zur Hardware herstellen. Du müsstest den shift-Operator schon auf die Zahl "10" anwenden und nicht auf "1010". Der Bit-Shift Operator ist von der Basis unabhängig und auch auf die Dezimalzahlen 7,8,9 anwendbar. Es gibt zwar noch (unendlich viele) weitere Shift-Operatoren, hier ist immer die Bit-Shift Variante gemeint. Ich hoffe, der ursprüngliche Author wurde durch die Diskussion nicht zu sehr von der Aufgabe abgelenkt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.