Floating-point multiplication

Alex Holkner xander at yifan.net
Tue Feb 5 00:43:29 EST 2002


> I don't know what "embedded python" means to you, and the answer
> is probably
> crucial.

Nothing special, it's a win32 app which runs Python scripts with
Py_Initialize / PyRun_SimpleString / Py_Finalize.

> "precision control" mode.  Core Python doesn't muck with the FPU control
> registers, so something outside of core Python you're doing, or
> calling, is
> doing the damage.  Scour the sources for calls to control87, _control87,
> controlfp or _controlfp.  If you find exactly one such call, it's wrong
> <wink>.

No luck, unfortunately.  My application makes use of DirectX (which I know
uses single-precision, but obviously I can't check its source, and I doubt
there's a bug there), and ODE (a dynamics library.. but no FPU control
functions used that I can find).

I tried putting _control87(_PC_64, _MCW_PC) before Py_Initialize and
PyRun_SimpleString (and restoring it afterwards); which makes everything
work as expected.  This is obviously not a fantastic solution, but it does
show that you're right about the cause of the problem.

I might play around with moving my _control87 around the code a bit to try
and find the cause, unless someone already knows of a DirectX issue (using
Direct3D7 interfaces)?

Thanks heaps for your help,
Alex.





More information about the Python-list mailing list