Code: Alles auswählen
1 -> 1
10 -> 2
100 -> 3
1000 -> 4
Könne dies etwas mit "log" zusammenhängen ?
Code: Alles auswählen
1 -> 1
10 -> 2
100 -> 3
1000 -> 4
Code: Alles auswählen
Uses Math;
Caption:=IntToStr(Trunc(log10(StrToInt(Edit1.text)))+1);
Code: Alles auswählen
Label1.Caption := IntToStr(length(Edit1.Text));
Es kommt darauf an, was Du als Neuzeit definierst. Logarithmen wurden nachweislich bereits im 2. Jahrhundert in Indien verwendet.wp_xyz hat geschrieben: Mi 27. Sep 2023, 13:38 Die Logarithmen waren eine der wichtigesten Erfindungen der Mathematik der Neuzeit. Und ohne so ein simples mechanisches Ding wie den Rechenschieber, den heute niemand mehr kennt, hätte man in der Vor-Computer-Zeit nie große Zahlen miteinander multiplizieren/dividieren können.
Code: Alles auswählen
function MyLOG10(x: integer): integer;
var
w: integer;
begin
result:=0;
w:=x;
repeat
w:=w div 10;
inc(result);
until w=0;
end;
function MyLOG10toStr(x: integer): string;
begin
result:=IntToStr(MyLog10(x));
end;
Ups, da habe ich mich ein bisschen falsch ausgedrückt.Und die Frage von Mathias habe ich mal so aufgefasst, dass die Anzahl der Stellen ermittelt werden sollte. Das muss nicht unbedingt mit Logarithmen zu tun haben ...
Wusste ich nicht... Europa ist halt nicht der Nabel der Welt.Niesi hat geschrieben: Mi 27. Sep 2023, 14:01 Es kommt darauf an, was Du als Neuzeit definierst. Logarithmen wurden nachweislich bereits im 2. Jahrhundert in Indien verwendet.
Ups, da habe ich mich ein bisschen falsch ausgedrückt.Und die Frage von Mathias habe ich mal so aufgefasst, dass die Anzahl der Stellen ermittelt werden sollte. Das muss nicht unbedingt mit Logarithmen zu tun haben ...
Code: Alles auswählen
float log10(float x){
//log10(x) = log(x) / log(10) = (1 / log(10)) * log(x)
const float d = 1. / log(10);
return d * log(x);
}
...
Height = log10(Height);
Code: Alles auswählen
function IntegerLength(X: Integer): Integer;
begin
//Für positive Werte reicht das hier:
Result := Length(X.ToString);
//Result := Trunc(log10(X)) + 1;
//Wenn es auch mit negativen Werten funktionieren soll:
//Result := Length(Abs(X).ToString);
//Result := Trunc(log10(Abs(X))) + 1;
end;
Kann schon sein, aber Mathias wollte eine Lösung mit "log" haben. Auf "Length" ist er wahrscheinlich auch gekommen.Ally hat geschrieben: Mi 27. Sep 2023, 16:03 sowohl die Lösung von Theo als auch die von Niesi, liefern die selben Ergebnisse.
Die "Length-Lösung" ist aber schon deshalb die Elegantere, weil Math nicht benötigt wird.
Genau dies suchte ich, und es sollte mit x-beliebigen Werte funktionieren, vor allem auch mit Fliesskommazahlen.Kann schon sein, aber Mathias wollte eine Lösung mit "log" haben.
Code: Alles auswählen
function Ln(d : ValReal) : ValReal;[internproc:fpc_in_ln_real];
Code: Alles auswählen
function Log10(x : float) : float;
function Log2(x : float) : float;
function LogN(n,x : float) : float;
Bei Ganzzahlen wäre dies sicher die einfachste Lösung.Auf "Length" ist er wahrscheinlich auch gekommen.
Code: Alles auswählen
type
Float = extended;