Programmiersprachen (Re: [linux-l] Ruby: sehr cool, aber laaaahm... wie geht's schneller?! - D?)

Oliver Bandel oliver at first.in-berlin.de
So Aug 27 13:02:48 CEST 2006


Hi,


On Sun, Aug 27, 2006 at 12:43:21PM +0200, Ivan F. Villanueva B. wrote:
> Am Do, Aug 24, 2006 09:40:44 +0200, Axel Weiß schrieb:
> > Oliver Bandel wrote:
> > > Vorschläge in anderen Sprachen?
> > > (Perl, Java, C, ...?!)
> > 
> > Hier, 15 Minuten:
> > --------------------------------
> > [C code]
> 
> Hier Java, 15 Minuten auch:
> --------------------------
[...]

Hätte gedacht, es dauert in Java länger. ;-)
Aber ich tippe auch nicht mit 10-Finger-System ;-)


OK, bei dem Beispiel geht das ja sogar noch mit rel. wenig Code.
Sieht sogar auch noch recht übersichtlich aus.

(Ich merke schon, das Beispiel ist zu simpel ;-))

 
[...]
> Ich würde es gerne in Perl, Rubby, Python, Ocalm und D sehen.
[...]

Rubby? Ist das der englische Radiergummie? oder meinst Du Ruby= ;-)
Ocalm? Meinst Du nicht OCaml?


Die OCaml-Version hatte ich bereits geschickt, aber bevor Du ewig suchst, hier nochmal:

==============================================================
(* -------------------------------------------------------------------- *)
(* This function is for calculating the numerical derivation for a      *)
(* function  f  with lower x-value at  x  and higher x-value at         *)
(* x + epsilon.                                                         *)
(* -------------------------------------------------------------------- *)
let derive f x epsilon = (  f(x +. epsilon) -. f x ) /. epsilon


(* --------------------------------------------------------------- *)
(* This function calculates the derivative with an epsilon = 0.001 *)
(* --------------------------------------------------------------- *)
let myderive f x = derive f x 0.001


(* -------------------------------------------------------------------- *)
(* List of pair, where the pairs are of type ( float -> float, string ) *)
(* This will be feed into the calculating function.                     *)
(* -------------------------------------------------------------------- *)
let function_list_with_titel = [
    (sin, "Sinus");
    (cos, "Kosinus");
    ((fun x -> x *. x), "Quadrat (Parabel)");
    ((fun x -> x *. x *. x), "Kubik") ]



let _ =
      List.iter (fun func_and_titel ->
                 Printf.printf "\n\nBerechnung von %s:\n" (snd func_and_titel);
                 let func = fst func_and_titel in
    
                   for step = 0 to 63 (* steps *)
                   do
                     let x = float_of_int step *. 0.1 in
                     let y = func x in
                     let y' = myderive func x in
                     Printf.printf "x: %f, y: %f, y': %f\n" x y y'
                   done
               ) function_list_with_titel
==============================================================





Oder, wenn man die Kommentare genauso entfernt, wie bei den kommentarfreien
Java- und C-Lösungen, sieht es so aus:



==============================================================
let derive f x epsilon = (  f(x +. epsilon) -. f x ) /. epsilon

let myderive f x = derive f x 0.001

let function_list_with_titel = [
    (sin, "Sinus");
    (cos, "Kosinus");
    ((fun x -> x *. x), "Quadrat (Parabel)");
    ((fun x -> x *. x *. x), "Kubik") ]

let _ =
      List.iter (fun func_and_titel ->
                 Printf.printf "\n\nBerechnung von %s:\n" (snd func_and_titel);
                 let func = fst func_and_titel in
    
                   for step = 0 to 63 (* steps *)
                   do
                     let x = float_of_int step *. 0.1 in
                     let y = func x in
                     let y' = myderive func x in
                     Printf.printf "x: %f, y: %f, y': %f\n" x y y'
                   done
               ) function_list_with_titel
==============================================================

Selbstverständlich könnte man das noch etwas hübscher machen. ;-)
Hmhhh, kann ich ja noch machen. Kommt viell. nachher noch.


Gruß,
   Oliver



Mehr Informationen über die Mailingliste linux-l