m_fixed.c
上传用户:xuyinpeng
上传日期:2021-05-12
资源大小:455k
文件大小:2k
源码类别:

射击游戏

开发平台:

Visual C++

  1. // Emacs style mode select   -*- C++ -*- 
  2. //-----------------------------------------------------------------------------
  3. //
  4. // $Id:$
  5. //
  6. // Copyright (C) 1993-1996 by id Software, Inc.
  7. //
  8. // This source is available for distribution and/or modification
  9. // only under the terms of the DOOM Source Code License as
  10. // published by id Software. All rights reserved.
  11. //
  12. // The source is distributed in the hope that it will be useful,
  13. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
  15. // for more details.
  16. //
  17. // $Log:$
  18. //
  19. // DESCRIPTION:
  20. // Fixed point implementation.
  21. //
  22. //-----------------------------------------------------------------------------
  23. static const char
  24. rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $";
  25. #include "stdlib.h"
  26. #include "doomtype.h"
  27. #include "i_system.h"
  28. #ifdef __GNUG__
  29. #pragma implementation "m_fixed.h"
  30. #endif
  31. #include "m_fixed.h"
  32. //__USE_C_FIXED__ or something.
  33. fixed_t FixedMul( fixed_t a, fixed_t b )
  34.    {
  35.     return (((__int64) a * (__int64) b) >> FRACBITS);
  36.    }
  37. //
  38. // FixedDiv, C version.
  39. //
  40. fixed_t
  41. FixedDiv
  42. ( fixed_t a,
  43.   fixed_t b )
  44. {
  45.     if ( (abs(a)>>14) >= abs(b))
  46. return (a^b)<0 ? MININT : MAXINT;
  47.     return FixedDiv2 (a,b);
  48. }
  49. fixed_t
  50. FixedDiv2
  51. ( fixed_t a,
  52.   fixed_t b )
  53. {
  54. #if 0
  55.     long long c;
  56.     c = ((long long)a<<16) / ((long long)b);
  57.     return (fixed_t) c;
  58. #endif
  59.     double c;
  60.     c = ((double)a) / ((double)b) * FRACUNIT;
  61.     if (c >= 2147483648.0 || c < -2147483648.0)
  62. I_Error("FixedDiv: divide by zero");
  63.     return (fixed_t) c;
  64. }