Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Runden negativer Zahlen

Runden negativer Zahlen

Universität / Fachhochschule

Tags: Zahlentheorie

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
anonymous

anonymous

15:58 Uhr, 04.04.2007

Antworten
Hallo zusammen,



auf den ersten Blick scheint das Thema eher banal aber ich stehe vor einem Rätsel.



Ich habe zu Schulzeiten einmal aufgeschnappt, dass Abrunden bedeutet zur nächstkleineren Zahl zu springen. Bei Null Nachkommastellen also zur nächstkleineren ganzen Zahl. Bei Abrunden von -4,32 würde ich demnach also bei -5 landen.



Warum runden aber sowohl MS Excel als auch OpenOffice Calc an dieser Stelle zu -4 ?



Noch schnell die Frage, was dies mit Studium zu tun hat. Es geht um einen Suchalgorithmus (Interpolationssuche) bei dem an einer Stelle gerundet wird. Bei manchen Eingaben erfolgt an dieser Stelle eine negative Zahl. An dieser Stelle sscheiden sich nun die Geister. Rundet man wie es Excel macht, bricht der Suchvorgang wegen einer verbleibenden Suchmenge der Größe Null ab. Rundet man in die andere Richtung, landet der Algorithmus in einer Endlosschleife. Beide Szenarien sind denkbar, daher der Zwiespalt.



Gruß,

Marcel

Online-Nachhilfe in Mathematik
Antwort
fermat

fermat

17:22 Uhr, 04.04.2007

Antworten
nach deiner definition, dass abrunden runden zur nächst kleineren zahl bedeutet, ist es richtig dass -4,32 abgerundet -5 sein muss und -4 ist aufgerundet

ich denke mal, dass excel unter abrunden versteht:

Runden zur betragsmäßig kleineren Zahl. dann ist es wieder -4

-4 ist betragsmäßig kleiner als -5

ich glaube man versteht allgemein unter abrunden auch runden zur betragsmäßig kleineren Zahl und nicht runden zur kleineren Zahl. In der Schule wurde es von mir nie verlangt, dass ich negative Zahlen runde. deswegen weiß ich nicht was lehrer darunter verstehen.



gibt doch einfach statt

ABRUNDEN(-4,32;0)

AUFRUNDEN(-4,32;0)

ein

dann zeigt er auch -5 an, falls du es so haben willst



ich hab dein anliegen nochmal durchgelesen und habe noch nicht genau verstanden, wo im algorithmus das problem liegt.

wenn ich das richtig verstanden habe, dann müsste man das mit einer WENN Funktion umgehen können. kannst du das nochmal genauer erklären? dann kann ich dir vielleicht helfen

bei folgender angabe rundet excel bei positiven zahlen ganz normal ab und bei negativen werten rundet er nach deiner definition ab.

=WENN(A1<0;AUFRUNDEN(A1;0);ABRUNDEN(A1;0))

wenn ich dich richtig verstanden habe hilft dir das vielleicht







Antwort
anonymous

anonymous

18:26 Uhr, 04.04.2007

Antworten
Hallo,



und danke für das Angebot der Hilfe. Es dreht sich, wie erwähnt, um die Interpolationssuche oder auch Intervallsuche. (Siehe Wikipedia für eine genauere Beschreibung.)



Es geht im Prinzip darum ein Element in einem Feld durch "Vermutungen" zu finden. Getreu der Methode, wie ein Mensch einen Namen in einem Telefonbuch suchen würde. Keiner würde wohl den Namen Bauer in der Mitte oder am Ende des Telefonbuches suchen, sondern eher am Anfang.



Algorithmisch löst man dieses Verfahren, indem man aus den Grenzen des zu durchsuchenden Raums eine Gerade bildet und deren Steigung berechnet. Mit Hilfe dieser Steigung ermittelt man einen Wert, einen vermutlichen Index, an dem das gesuchte Element stehen müsste, wenn alle Elemente im Feld auf dieser Geraden lägen.



Das Problem ist nun das Errechnen dieses vermutlichen Index'. Hier ist zu rechnen:



abrunden (( key - a[linkeGrenze] ) / Steigung ) + linkeGrenze



In Worten: Man zieht vom gesuchten Wert, den Feldinhalt der linken Grenze ab und teilt diese Differenz durch die Steigung. Das Ergebnis ist abzurunden. Anschliessend wird der Index der linken Grenze hinzuaddiert.



Das ganze Verfahren wird solang wiederholt, bis man entweder keine Elemente mehr im Suchraum hat, das Element gefunden hat, oder das Element ausserhalb des Suchraums liegt.



In unserem Fall ist das Feld mit 20 Einträgen gefüllt. Der Index wird mit dem Buchstaben i gekennzeichnet, das Feld heißt a. Es gilt: a[i] = (i-10)^3. Die im Feld zu suchende Zahl ist 10.



Daraus ergeben sich folgende Werte:

1. Suchvorgang

linkeGrenze := 0

rechteGrenze := 19

a[linkeGrenze] := -1000

a[rechteGrenze] := 729

Steigung := (a[rechts]-a[links]) / (rechts - links) = 91

Mitte := (Berechnung siehe oben) = 11

a[Mitte] := 1



a[Mitte] ist 1 und damit kleiner als die gesuchte 10. Diese muss weiter rechts im Feld liegen. Die rechte Grenze bleibt bestehen, die linke Grenze des Suchraums ist Mitte + 1. Es folgt:

2. Suchvorgang

linkeGrenze := 12

rechteGrenze := 19

a[linkeGrenze] := 8

a[rechteGrenze] := 729

Steigung := (Berechnung siehe 1. Runde) = 103

Mitte := (Berechnung siehe oben) = 12

a[Mitte] := 8



a[Mitte] ist 8 und damit kleiner als die gesuchte 10. Suche wird rechts fortgesetzt. Neue linke Grenze ist Mitte + 1.

Es folgt:

3. Suchvorgang

linkeGrenze := 13

rechteGrenze := 19

a[linkeGrenze] := 27

a[rechteGrenze] := 729

Steigung := (Berechnung siehe 1. Runde) = 117

Mitte := Hier liegt nun das Problem. Es ist zu rechnen:



abrunden (( key - a[linkeGrenze] ) / Steigung ) + linkeGrenze

abrunden (( 10 - 27 / 117 ) + 13



Rundet man hier wie Excel, dann erhält man für Mitte := 0 + 13 = 13. a[Mitte] = 27. 27 ist größer als 10. Man müsste nun links von Mitte weitersuchen. Dadurch würde die rechte Grenze aber links der linken Grenze liegen. Der Suchraum hätte dann Null Elemente. Die Suche wäre an dieser Stelle zu Ende. So weit so gut.



Rundet man hier aber zur nächstkleineren ganzen Zahl erhält man -1 + 13 = 12. Man landet also dort, wo man in der 2. Runde bereits war und damit in einer Endlosschleife.



Programmiert man dieses Verfahren nun beispielsweise in C, dann geschieht dies tatsächlich auch.



So. Lange Rede kurzer Sinn. Es stehen sich damit zwei Methoden gegenüber, die beide plausibel sind. Aber nur eine kann das Rennen machen. :-)



Gruß,

Marcel