bbmath.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "std.h"
  2. #include "bbmath.h"
  3. static int rnd_state;
  4. static const int RND_A=48271;
  5. static const int RND_M=2147483647;
  6. static const int RND_Q=44488;
  7. static const int RND_R=3399;
  8. static const float dtor=0.0174532925199432957692369076848861f;
  9. static const float rtod=57.2957795130823208767981548141052f;
  10. float bbSin( float n ){ return (float)sin(n*dtor); }
  11. float bbCos( float n ){ return (float)cos(n*dtor); }
  12. float bbTan( float n ){ return (float)tan(n*dtor); }
  13. float bbASin( float n ){ return (float)asin(n)*rtod; }
  14. float bbACos( float n ){ return (float)acos(n)*rtod; }
  15. float bbATan( float n ){ return (float)atan(n)*rtod; }
  16. float bbATan2( float n,float t ){ return (float)atan2(n,t)*rtod; }
  17. float bbSqr( float n ){ return (float)sqrt(n); }
  18. float bbFloor( float n ){ return (float)floor(n); }
  19. float bbCeil( float n ){ return (float)ceil(n); }
  20. float bbExp( float n ){ return (float)exp(n); }
  21. float bbLog( float n ){ return (float)log(n); }
  22. float bbLog10( float n ){ return (float)log10(n); }
  23. //return rand float from 0...1
  24. static inline float rnd(){
  25. rnd_state=RND_A*(rnd_state%RND_Q)-RND_R*(rnd_state/RND_Q);
  26. if( rnd_state<0 ) rnd_state+=RND_M;
  27. return (rnd_state&65535)/65536.0f+(.5f/65536.0f);
  28. }
  29. float bbRnd( float from,float to ){
  30. return rnd()*(to-from)+from;
  31. }
  32. int bbRand( int from,int to ){
  33. if( to<from ) std::swap( from,to );
  34. return int(rnd()*(to-from+1))+from;
  35. }
  36. void bbSeedRnd( int seed ){
  37. seed&=0x7fffffff;
  38. rnd_state=seed ? seed : 1;
  39. }
  40. int bbRndSeed(){
  41. return rnd_state;
  42. }
  43. bool math_create(){
  44. bbSeedRnd( 0x1234 );
  45. return true;
  46. }
  47. bool math_destroy(){
  48. return true;
  49. }
  50. void math_link( void (*rtSym)( const char *sym,void *pc ) ){
  51. rtSym( "#Sin#degrees",bbSin );
  52. rtSym( "#Cos#degrees",bbCos );
  53. rtSym( "#Tan#degrees",bbTan );
  54. rtSym( "#ASin#float",bbASin );
  55. rtSym( "#ACos#float",bbACos );
  56. rtSym( "#ATan#float",bbATan );
  57. rtSym( "#ATan2#floata#floatb",bbATan2 );
  58. rtSym( "#Sqr#float",bbSqr );
  59. rtSym( "#Floor#float",bbFloor );
  60. rtSym( "#Ceil#float",bbCeil );
  61. rtSym( "#Exp#float",bbExp );
  62. rtSym( "#Log#float",bbLog );
  63. rtSym( "#Log10#float",bbLog10 );
  64. rtSym( "#Rnd#from#to=0",bbRnd );
  65. rtSym( "%Rand%from%to=1",bbRand );
  66. rtSym( "SeedRnd%seed",bbSeedRnd );
  67. rtSym( "%RndSeed",bbRndSeed );
  68. }