comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: 10 bytes real
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: 10 bytes real [message #22230] Mon, 30 October 2000 13:46 Go to previous message
Peter Mason is currently offline  Peter Mason
Messages: 145
Registered: June 1996
Senior Member
"Karl Schultz" <kschultz@researchsystems.com> wrote:
<...>
> Also, the 80x87 math processors on wintel machines are 80-bit anyway
> and I think that there are instructions that would load 80-bit floats
> into the floating point regs. After you've done that, you can read
> them back out as a double. I don't know if there is any C compiler
> support.
<...>

Apparently the MS visual C compiler knows about "long doubles" - 80-bit
IEEE floating point numbers.
*Provided* that your 10-byte numbers are indeed IEEE FP format, you
should be able to use the following routine (compiled etc) to do the
conversion. On the input side I gues you'd just use a BYTARR or
something, stuffed with the inscrutable 10-byte reals, and for the
output you'd present a DOUBLE array of the right size - hopefully it
will get filled with something useful :-)
I haven't tested the routine below. (In fact I've never used a "long
double" before.) But give it a try.
If you don't have a MS visual C compiler, let me know and I will
compile the routine for you.

Cheers
Peter Mason


/*
10-byte to 8-byte IEEE floating-point converter (untested).
Peter Mason, CSIRO DEM, October 2000
*/
#define STRICT
#define VC_EXTRALEAN
#include <windows.h>

/*********************************************************** ************
******/
BOOL WINAPI DllMain(HINSTANCE hinst, unsigned long reason, void *resvd)
{
hinst=hinst; reason=reason; resvd=resvd;
return 1;
}
/*********************************************************** **********/
/*
This is it.
The call is:
status=call_external('[pathfconv.dll','idlfp10to8',in10,out8 ,n)
. in10[n] is an array of 10-byte IEEE floating-point numbers;
. out8[n] is an array that will be filled with the conversions;
. n is the number of numbers (in all its splendour?)
*/
int WINAPI idlfp10to8(int ac, int *a[])
{
register long double *in10;
register double *out8;
register int n;
if(ac!=3) return 1; //incorrect number of arguments
in10 = (long double *)a[0];
out8 = (double *)a[1];
n = *a[2];
for( ; n; --n, ++in10, ++out8) *out8 = (double)(*in10);
return 0;
}
/*********************************************************** **********/


Sent via Deja.com http://www.deja.com/
Before you buy.
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Re: eps bounding boxes
Next Topic: variable types in external C modules

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 13:33:41 PDT 2025

Total time taken to generate the page: 0.00717 seconds