Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Das hoch zeichen (https://www.delphipraxis.net/132955-das-hoch-zeichen.html)

EWeiss 22. Apr 2009 18:25


Das hoch zeichen
 
Wie wird das zeichen in Delphi innerhalb einer Berechnung dargestellt ?
Delphi-Quellcode:
le := 2 ^ l;
^ ist ja reserviert für pointer

gruss Emil

Die Muhkuh 22. Apr 2009 18:26

Re: Das hoch zeichen
 
Hallo Emil,

das geht mit Math.Power(Basis, Exponent).

DeddyH 22. Apr 2009 18:27

Re: Das hoch zeichen
 
Wenn ich mich nicht irre mit math.Power() bzw. sqr() (für das Quadrat einer Zahl).

[edit] *Pah*, immer diese Kühe :stupid: [/edit]

Teekeks 22. Apr 2009 18:27

Re: Das hoch zeichen
 
schau dir power() an.
ps: dein Beispiel ist aber auch sinnig ^^
[edit]zuspät :( [/edit]

EWeiss 22. Apr 2009 18:33

Re: Das hoch zeichen
 
Zitat:

Zitat von Teekeks
schau dir power() an.
ps: dein Beispiel ist aber auch sinnig ^^
[edit]zuspät :( [/edit]

Hmm hier der ganze code ;)
Denke aber nicht das du damit was anfangen kannst oder doch ?
Ist aus einem Vis Plugin was ich mal in Vb geschrieben habe.


Delphi-Quellcode:
Procedure XFFT(FR: array of Single; FI: array of Single; Sign: Integer);
//' Smooth The Wave Data.
var
 Q, J, M, l, le, le1, ip       : Integer;
 tr, ti, s, ur, ur1, ui, wr, wi : Single;

begin
    J := 1;
    For Q := 1 To 255 do
    begin
        If Q < J Then
        begin
            s := FR[Q];
            FR[Q] := FR[J];
            FR[J] := s;
            s := FI[Q];
            FI[Q] := FI[J];
            FI[J] := s;
        end;
        M := 128;
         While M < J do
         begin
            J := J - M;
            M := M div 2;
         end;
         J := J + M;
    end;

    For l := 1 To 8 do
    begin
        le := 2 ^ l; //>>>>> problem
        le1 := le div 2;
        ur := 1;
        ui := 0;
        wr := Cos(PI / le1);
        wi := Sign * Sin(PI / le1);
        For J := 1 To le1 do
        begin
            Q := J;
            While Q <= 256 do
            begin
                ip := Q + le1;
                tr := FR[ip] * ur - FI[ip] * ui;
                ti := FR[ip] * ui + FI[ip] * ur;
                FR[ip] := FR[Q] - tr;
                FI[ip] := FI[Q] - ti;
                FR[Q] := FR[Q] + tr;
                FI[Q] := FI[Q] + ti;
                Q := Q + le;
            end;
            ur1 := ur * wr - ui * wi;
            ui := ur * wi + ui * wr;
            ur := ur1;
        end;
    end;

    For Q := 1 To 256 do
    begin
        FR[Q] := FR[Q] * DivN;
        FI[Q] := FI[Q] * DivN;
    end;

end;
EDIT:
Jetzt meldet er wieder
Zitat:

le := Power(2, l);
[Pascal Error] uDraw.pas(287): E2010 Incompatible types: 'Integer' and 'Single'

gruss Emil

Die Muhkuh 22. Apr 2009 18:34

Re: Das hoch zeichen
 
Ach, das ist ein L und keine 1 *g*

Delphi-Quellcode:
le := Math.Power(2, l);

EWeiss 22. Apr 2009 18:36

Re: Das hoch zeichen
 
Zitat:

Zitat von Die Muhkuh
Ach, das ist ein L und keine 1 *g*

Delphi-Quellcode:
le := Math.Power(2, l);

Jo ;)
Macht aber ärger

[Pascal Error] uDraw.pas(287): E2010 Incompatible types: 'Integer' and 'Single'

EDIT:
Ok habs geändert
Delphi-Quellcode:
le := trunc(Power(2, l));
obs damit läuft muss ich erst noch testen.

gruss Emil

Teekeks 22. Apr 2009 18:37

Re: Das hoch zeichen
 
Zitat:

Zitat von Die Muhkuh
Ach, das ist ein L und keine 1 *g*

achso... :P

DeddyH 22. Apr 2009 18:44

Re: Das hoch zeichen
 
Dann versuch es mal mit trunc(), round(), oder was am besten passt. Power() gibt Dir nämlich eine Fließkommazahl zurück.

EWeiss 22. Apr 2009 18:45

Re: Das hoch zeichen
 
Zitat:

Zitat von DeddyH
Dann versuch es mal mit trunc(), round(), oder was am besten passt. Power() gibt Dir nämlich eine Fließkommazahl zurück.

Danke DeddyH war schneller siehe mein Edit ;)

gruss Emil

DeddyH 22. Apr 2009 18:51

Re: Das hoch zeichen
 
;) :cheers:

Hawkeye219 22. Apr 2009 19:17

Re: Das hoch zeichen
 
Hallo,

ist der Umweg über Fließkommaoperationen in diesem Fall wirklich notwendig?

Delphi-Quellcode:
le := 1 shl l;
Der Code (und die Reaktionen darauf) zeigen übrigens sehr eindrucksvoll, wie wichtig es ist, Variablennamen wie "l" zu vermeiden.

Gruß Hawkeye

DeddyH 22. Apr 2009 19:21

Re: Das hoch zeichen
 
Vorausgesetzt, dass die Basis immer 2 ist, ist Bitshifting wirklich die bessere Alternative IMHO.

himitsu 22. Apr 2009 19:43

Re: Das hoch zeichen
 
Zitat:

Zitat von DeddyH
Vorausgesetzt, dass die Basis immer 2 ist, ist Bitshifting wirklich die bessere Alternative IMHO.

ist sie in diesem Fall ja mal ^^

Delphi-Quellcode:
le := 1 shl L;

DeddyH 22. Apr 2009 19:45

Re: Das hoch zeichen
 
Ich meinte ja auch hier:
Zitat:

Delphi-Quellcode:
le := 2 ^ l; //>>>>> problem


EWeiss 23. Apr 2009 20:27

Re: Das hoch zeichen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Irgendwas stimmt immer noch nicht.
Hab beides versucht das ergebnis ist nicht so wie es sein soll.

Delphi-Quellcode:
le := round(Power(2, L)); //1 shl L;
pic2 so soll es aussehen
pic1 so sieht es aus.

gruss Emil

mjustin 23. Apr 2009 21:15

Re: Das hoch zeichen
 
Zitat:

Zitat von Hawkeye219
Hallo,

ist der Umweg über Fließkommaoperationen in diesem Fall wirklich notwendig?

Delphi-Quellcode:
le := 1 shl l;
Der Code (und die Reaktionen darauf) zeigen übrigens sehr eindrucksvoll, wie wichtig es ist, Variablennamen wie "l" zu vermeiden.

Gruß Hawkeye

Erinnert mich an Clipper 87 - da durfte man eine Variable ungestraft "IF" nennen. Fiel dann aber später - in Clipper 5 - auf. ...

EWeiss 23. Apr 2009 21:20

Re: Das hoch zeichen
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hmm egal funktioniert jetzt.
Ist mal ne andere Vis nicht das was jeder hat. :)
Hab es was größer gemacht in meinen Player ist es etwas kleiner dafür
aber für den rechten und linken Kanal.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz