m_fixed.c
资源名称:21.rar [点击查看]
上传用户:xuyinpeng
上传日期:2021-05-12
资源大小:455k
文件大小:2k
源码类别:
射击游戏
开发平台:
Visual C++
- // Emacs style mode select -*- C++ -*-
- //-----------------------------------------------------------------------------
- //
- // $Id:$
- //
- // Copyright (C) 1993-1996 by id Software, Inc.
- //
- // This source is available for distribution and/or modification
- // only under the terms of the DOOM Source Code License as
- // published by id Software. All rights reserved.
- //
- // The source is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
- // for more details.
- //
- // $Log:$
- //
- // DESCRIPTION:
- // Fixed point implementation.
- //
- //-----------------------------------------------------------------------------
- static const char
- rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $";
- #include "stdlib.h"
- #include "doomtype.h"
- #include "i_system.h"
- #ifdef __GNUG__
- #pragma implementation "m_fixed.h"
- #endif
- #include "m_fixed.h"
- //__USE_C_FIXED__ or something.
- fixed_t FixedMul( fixed_t a, fixed_t b )
- {
- return (((__int64) a * (__int64) b) >> FRACBITS);
- }
- //
- // FixedDiv, C version.
- //
- fixed_t
- FixedDiv
- ( fixed_t a,
- fixed_t b )
- {
- if ( (abs(a)>>14) >= abs(b))
- return (a^b)<0 ? MININT : MAXINT;
- return FixedDiv2 (a,b);
- }
- fixed_t
- FixedDiv2
- ( fixed_t a,
- fixed_t b )
- {
- #if 0
- long long c;
- c = ((long long)a<<16) / ((long long)b);
- return (fixed_t) c;
- #endif
- double c;
- c = ((double)a) / ((double)b) * FRACUNIT;
- if (c >= 2147483648.0 || c < -2147483648.0)
- I_Error("FixedDiv: divide by zero");
- return (fixed_t) c;
- }