Oops, ja, das mit den 64/54 Bit hab ich übersehen/nicht dran gedacht. Ist aber OK, mir reichen 54 Bit auch vollkommen. 24 sind halt ... u.U. grenzwertig.
rapso schrieb:
Ob D3D ohne D3DCREATE_FPU_PRESERVE die Genauigkeit auch ausserhalb von D3D Calls runterschraubt, steht aber nicht da.
bei d3dcreate wird auf 24 geschaltet.
OK.
Was muss/soll ich also machen, wenn ich in meinem Programm mit 54 Bit Precision rechnen will?
Einfach vor CreateDevice () auf double precision, round-to-nearest und exeptions=masked schalten, und dann D3DCREATE_FPU_PRESERVE übergeben?
Oder vor/nach jedem D3D Aufruf _controlfp() machen?
rapso schrieb:
jeder thread hat sein eigenes register set, windows muss diese gesondert halten, sonst waere _controlfp sinnfrei, entsprechend kannst du deine unterhose darauf verwetten dass es auch so ist.
Naja, _controlfp könnte prozessweit gelten (bei systemweit ist mir auch klar dass es nicht so sein kann :)). Zugegebenermassen recht weit hergeholt, aber ich wollte sicherheitshalber nochmal nachfragen.
ps: kann es sein, dass _controlfp(0, 0) den Returnwert nicht aus den CPU Registern holt, sondern da irgendwo was böse cachen tut? Ich hab' nämlich bereits mit _controlfp(0, 0) "geguckt was eingestellt ist", und da hab ich 64 Bit Precision zurückbekommen. Trotzdem habe ich (ohne jeglichen _controlfp() Aufruf) nach einem einzigen div einen relativen Fehler in der Grössenordnung von e-8 (was ja ziemlich genau zu 24 Bit Precision passt).