DMUG-Archiv 2006

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Auf n gültige Ziffern runden?

Hallo Frank,

Frank Küster wrote:

RoundToRecursive[number_, precision_, factor_, multiplications_] := Module[{epsilon},
   epsilon = 10\^-10; \  (*needed because Round[2.5] gives 2*)
   If[ 10\^(precision - 1) <= number < 10\^precision,
     Return[
      { Round[number + epsilon], multiplications}
     ]
   ];
   newmultiplications = multiplications + 1;
   varnumber = number; (* warum gibt's einen Fehler, wenn ich number
                          direkt verändere?*)

(1) erste Antwort: number ist an der Stelle kein lvalue, oder mit anderen Worten, Mma. Funktionen übernehmen die Argumente "by value", nicht "by reference" -> see pass by value vs. pass by reference (pointer).

(2) zweite Antwort: Mma Funktionen kennen keine IN/OUT Argumente, wie etwa in PL/SQL. Der übergebene Wert ist in der Funktion ein bestimmter - instanziiert - und dieser Instanz, etwa 0.815, kann keine andere Instanz zugewiesen werden.

(3) Beispiel:

In[11]:=
Remove[evaluation]
evaluation[x_, y_] := Block[{}, y = x;  Print["y ist x geworden: ", y]]

In[13]:= evaluation[8.4, 4.8]
From In[13]:= Set::setraw : Cannot assign to raw object 4.8`. Mehr ...
From In[13]:= y ist x geworden: 4.8

y wird nicht x. Die Fehlermeldung ist eigentlich klar.

Gruss
Udo.



Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html