Da ich mich erst stundenlang in ASM einarbeiten muss, um eine simple Addition durchzuführen, lasse ich Andy den Vorrang, zumal das Ergebnis wesentlich besser sein dürfte, aber hier die DLL Version, falls Interesse besteht:
Code
#AutoIt3Wrapper_UseX64=n
$hDLL = DllOpen(@AutoItX64 ? "Sum64.dll" : "Sum.dll")
$len = 900000
Global $tData = DllStructCreate("DOUBLE x[" & $len & "]")
$sum = 0
; füllen
For $i = 1 To $len
$tData.x(($i)) = 1 / $i
$sum += $tData.x(($i))
Next
ConsoleWrite("AutoIt sum: " & $sum & @CRLF)
ConsoleWrite("----------------" & @CRLF)
$aReturnF = DllCall($hDll, "float", "SumF", "struct*", $tData, "ulong", $len)
ConsoleWrite("DLL sum float: " & $aReturnF[0] & @CRLF)
$aReturnD = DllCall($hDll, "double", "SumD", "struct*", $tData, "ulong", $len)
ConsoleWrite("DLL sum double: " & $aReturnD[0] & @CRLF)
DllClose($hDLL)
Alles anzeigen
Im Anhang die zwei DLLs.
Die DLL habe ich in Freebasic geschrieben.
Btw, wie soll bei der Float summiert werden, wenn du ein Double Array übergibst? Soll Float summiert werden oder Double? Das Ergebnis ist natürlich Float.