Inline assembler functie expx() (moet in assembler)
Geplaatst: di 01 jan 2008, 20:11
Hallo iedereen
Ik heb net een functie geschreven en dan voer in in een console scherm de waarde 10 in en wat blijkt deze geeft als resultaat -1.#IND geen idee wat hier fout in mijn code zit heb het volgens de wiskundige regels gedaan
Dat is mijn code die ik heb geschreven:
Heeft iemand enig idee wat hier fout gaat heb ik ergens iets overscrhreven?
Ik heb net een functie geschreven en dan voer in in een console scherm de waarde 10 in en wat blijkt deze geeft als resultaat -1.#IND geen idee wat hier fout in mijn code zit heb het volgens de wiskundige regels gedaan
Dat is mijn code die ik heb geschreven:
Code: Selecteer alles
//================================================================
// Berekend ExpX(x)
// ExpX(x) = 2 ^ (x * Log(e)
// We gebruiken 3 vrije registers ST(0), ST(1), ST(2)
//================================================================
extern double ExpX(double x)
{
double temp;
short MaskedCW;
short SaveCW;
_asm
{
FST x
FLDL2E
FMUL
FSTCW MaskedCW
;
FSTCW SaveCW
OR BYTE PTR MaskedCW + 1, 1100b;
FLDCW MaskedCW
FLD ST(0)
FLD ST(0)
FRNDINT
; bereken gehele deel
FXCH
; verwissel de int waarden
FSUB ST(0), ST(1)
; bereken frac deel
F2XM1
; bereken 2 ^ frac(x) - 1
FLD1
FADD
; bereken 2 ^ frac(x)
FXCH
; Ophalen van het gehele deel
FLD1
; bereken 1 * 2 ^ int(x)
FSCALE
FSTP ST(1)
; haal de waarde van de stack ST(1) op
FMUL
; bereken 2 ^ int(x) * 2 ^ frac(x)
FLDCW SaveCW
; herstel de afrondingsmode
FST temp
FNINIT
}
return(temp);
}