Ignore:
Timestamp:
Mar 2, 2008, 1:58:48 AM (13 years ago)
Author:
Sam Hocevar
Message:
  • Fix argument types in lisp_cos(), lisp_sin() and lisp_atan() to avoid overflows. Closes #1 #2 #3.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • abuse/trunk/src/lisp.cpp

    r39 r43  
    677677}
    678678
    679 long lisp_cos(long x)
     679int32_t lisp_cos(int32_t x)
    680680{
    681681  x=(x+FIXED_TRIG_SIZE/4)%FIXED_TRIG_SIZE;
     
    684684}
    685685
    686 long lisp_sin(long x)
     686int32_t lisp_sin(int32_t x)
    687687{
    688688  x=x%FIXED_TRIG_SIZE;
     
    691691}
    692692
    693 long lisp_atan2(long dy, long dx)
     693int32_t lisp_atan2(int32_t dy, int32_t dx)
    694694{
    695695  if (dy==0)
     
    709709        if (abs(dx)>abs(dy))
    710710        {
    711           long a=dx*29/dy;
     711          int32_t a=dx*29/dy;
    712712          if (a>=TBS) return 0;
    713713          else return 45-atan_table[a];
     
    715715        else
    716716        {
    717           long a=dy*29/dx;
     717          int32_t a=dy*29/dx;
    718718          if (a>=TBS) return 90;
    719719          else return 45+atan_table[a];
     
    723723        if (abs(dx)>abs(dy))
    724724        {
    725           long a=dx*29/abs(dy);
     725          int32_t a=dx*29/abs(dy);
    726726          if (a>=TBS)
    727727            return 0;
     
    731731        else
    732732        {
    733           long a=abs(dy)*29/dx;
     733          int32_t a=abs(dy)*29/dx;
    734734          if (a>=TBS)
    735735            return 260;
     
    744744        if (abs(dx)>abs(dy))
    745745        {
    746           long a=-dx*29/dy;
     746          int32_t a=-dx*29/dy;
    747747          if (a>=TBS)
    748748            return 135+45;
     
    752752        else
    753753        {
    754           long a=dy*29/-dx;
     754          int32_t a=dy*29/-dx;
    755755          if (a>=TBS)
    756756            return 135-45;
     
    762762        if (abs(dx)>abs(dy))
    763763        {
    764           long a=-dx*29/abs(dy);
     764          int32_t a=-dx*29/abs(dy);
    765765          if (a>=TBS)
    766766            return 225-45;
     
    769769        else
    770770        {
    771           long a=abs(dy)*29/abs(dx);
     771          int32_t a=abs(dy)*29/abs(dx);
    772772          if (a>=TBS)
    773773            return 225+45;       
Note: See TracChangeset for help on using the changeset viewer.