Hi
Ich brauche für ein Projekt ein paar schnelle Berechnungen, deshalb hab ich einen Geschwindigkeitsvergleich gemacht, damit ich dann die schnellste Variante verwenden kann.
Aus diesem Grund hab ich in Dev-C, FreeBasic und FreePascal DLL´s geschrieben, die die benötigten Rechenoperationen verwenden und die Zeit gemessen
Allerdings ist das Ergebnis ganz anders, als erwartet!
Ich dachte, daß es die Reihenfolge C, Pascal, Basic wäre, aber es ist genau andersrum:
Hab ich was übersehen, oder muß der Code in C/Pascal anders geschrieben werden; gibt es weitere Optimierungen bei den Compilern...?
Oder ist der FreeBasic Compiler einfach sehr gut?
C-Code:
Spoiler anzeigen
#include <windows.h>
#include <math.h>
extern "C" __declspec( dllexport ) DWORD __stdcall Calc (DWORD iSteps);
DWORD Calc (DWORD iSteps)
{
int iLoop, iStep;
float const Pi = 3.14159265358979;
float fX, fY, fA;
for (iStep=0; iStep<=iSteps; iStep++)
{
for (iLoop=0; iLoop<=359; iLoop++)
{
fA = iLoop * (Pi / 180);
fX = cos(fA) * 100;
fY = sin(fA) * 100;
fA = atan2(fY, fX);
fA = sqrt(pow(fX, 2) + pow(fY, 2));
}
}
return iSteps;
}
BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
return TRUE;
}
Alles anzeigen
Pascal-Code:
Spoiler anzeigen
library Speed;
uses
Math;
function Calc(iSteps: DWord): dword; stdcall;
var
fX, fY, fA: single;
iLoop, iStep: DWord;
begin
for iStep := 1 to iSteps do
for iLoop := 0 to 359 do
begin
fA := iLoop * (PI / 180);
fX := Cos(fA) * 100;
fY := Sin(fA) * 100;
fA := ArcTan2(fY, fX);
fA := Sqrt(power(fX, 2) + power(fY, 2));
end;
Result := iSteps;
end;
exports Calc;
begin
end.
Alles anzeigen
Basic-Code:
Spoiler anzeigen
#Include "windows.bi"
Public Const Pi = 3.14159265358979
Function Calc Alias "Calc"(ByVal iSteps As Dword) As Dword Export
Dim fX As Single
Dim fY As Single
Dim fA As Single
Dim iLoop As Dword
Dim iStep As Dword
For iStep = 1 To iSteps
For iLoop = 0 To 359
fA = iLoop * (PI / 180)
fX = Cos(fA) * 100
fY = Sin(fA) * 100
fA = ATan2(fY, fX)
fA = Sqr(fX^2 + fY^2)
Next
Next
Return iSteps
End Function
Alles anzeigen
Würd mich interessieren, was die Profis dazu sagen...
Edit: Kann jemand testen, welche Ergebnisse mit anderen Compilern erreicht werden (VisualC++, Delphi...)
Danke