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