flt_arith.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * (c) copyright 1989 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. * See the copyright notice in the ACK home directory, in the file "Copyright".
  4. */
  5. /* $Id$ */
  6. #ifndef __FLT_INCLUDED__
  7. #define __FLT_INCLUDED__
  8. #include "ansi.h"
  9. #ifndef arith
  10. #define arith long
  11. #endif
  12. struct flt_mantissa {
  13. long flt_h_32; /* high order 32 bits of mantissa */
  14. long flt_l_32; /* low order 32 bits of mantissa */
  15. };
  16. typedef struct flt_arith {
  17. short flt_sign; /* 0 for positive, 1 for negative */
  18. short flt_exp; /* between -16384 and 16384 */
  19. struct flt_mantissa flt_mantissa; /* normalized, in [1,2). */
  20. } flt_arith;
  21. extern int flt_status;
  22. #define FLT_OVFL 001
  23. #define FLT_UNFL 002
  24. #define FLT_DIV0 004
  25. #define FLT_NOFLT 010
  26. #define FLT_BTSM 020
  27. #define FLT_STRLEN 32 /* max length of result of flt_flt2str() */
  28. _PROTOTYPE(void flt_add, (flt_arith *, flt_arith *, flt_arith *));
  29. _PROTOTYPE(void flt_sub, (flt_arith *, flt_arith *, flt_arith *));
  30. _PROTOTYPE(void flt_mul, (flt_arith *, flt_arith *, flt_arith *));
  31. _PROTOTYPE(void flt_div, (flt_arith *, flt_arith *, flt_arith *));
  32. _PROTOTYPE(void flt_modf, (flt_arith *, flt_arith *, flt_arith *));
  33. _PROTOTYPE(int flt_cmp, (flt_arith *, flt_arith *));
  34. _PROTOTYPE(void flt_str2flt, (char *, flt_arith *));
  35. _PROTOTYPE(void flt_flt2str, (flt_arith *, char *, int));
  36. _PROTOTYPE(void flt_arith2flt, (arith, flt_arith *, int));
  37. _PROTOTYPE(arith flt_flt2arith, (flt_arith *, int));
  38. _PROTOTYPE(void flt_b64_sft, (struct flt_mantissa *, int));
  39. _PROTOTYPE(void flt_umin, (flt_arith *));
  40. #endif /* __FLT_INCLUDED__ */