MathFixedGenerator.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /* $Id: MathFixedGenerator.java,v 1.4 2008-10-24 05:44:04 rzr Exp $ */
  2. /**
  3. * @author www.Philippe.COVAL.free.fr
  4. * Copyright and License : http://rzr.online.fr/license.htm
  5. **/
  6. class MathFixedGenerator
  7. {
  8. public static int toFixedPoint( double a,int precision)
  9. {
  10. return (int) ( ( a * precision )
  11. + ( ( a > 0 ) ? (.5) : ( -.5)) );
  12. }
  13. public static double toFixedPoint( int a,int precision)
  14. {
  15. return (double) a / (double) precision;
  16. }
  17. public static void toFixedPoint(double a[], int size,
  18. int r[] , int precision)
  19. {
  20. int i=0;
  21. for(i=0;i<size ;i++)
  22. r[i]= (int) ( ( a[i] * precision )
  23. + ( ( a[i] > 0 ) ? (.5) : ( -.5)) );
  24. }
  25. public static String toString(double a[], int size)
  26. {
  27. String s="{ ";
  28. int i=0;
  29. for(i=0;i<size - 1;i++) {
  30. s+= a[i] +", ";
  31. }
  32. s+= a[i] +" }; ";
  33. return s;
  34. }
  35. public static String toString(int a[], int size)
  36. {
  37. String s="{ ";
  38. int i=0;
  39. for(i=0;i<size - 1;i++) {
  40. s+= a[i] +", ";
  41. }
  42. s+= a[i] +" }; ";
  43. return s;
  44. }
  45. public static double sin(double a, double[] ar , int size)
  46. {
  47. a = a%(2. * Math.PI );
  48. //System.out.println("sin a="+ a );
  49. int i= (int) ( .5 + ( ( a * (double) (size ) / (2.*Math.PI) ) ) );
  50. //System.out.println("sin i="+ i );
  51. return ar[i];
  52. }
  53. public static void generate(double ar[], int size)
  54. {
  55. double pi = Math.PI; //3.14
  56. double offset = (2. * pi) / (double) (size ); // /4 could save mem
  57. double a=0;
  58. for(int i=0;i <size; i++) {
  59. ar[i] = Math.sin(a);
  60. //System.out.println( i+ "=" + a +"="+ trigo[ i ] );
  61. a+=offset;
  62. }
  63. }
  64. public static void printsin(int precision)
  65. {
  66. //double l= 3.14d / 4.d ;
  67. // int s=(int) ( l / offset );
  68. //precision = 100;
  69. precision = 64
  70. ;
  71. double trigo[]=new double[precision];
  72. double pi = Math.PI; //3.14
  73. double offset = (2. * pi)
  74. / (double) (precision ); // /4 could save mem
  75. double a=0;
  76. for(int i=0;i <precision; i++) {
  77. trigo[i] = Math.sin(a);
  78. //System.out.println( i+ "=" + a +"="+ trigo[ i ] );
  79. a+=offset;
  80. }
  81. System.out.println( toString(trigo, precision ) );
  82. System.out.println(".tests");
  83. a = 0;
  84. int ic= 0;
  85. //a = pi * 2;
  86. //a = ( pi / 2. ) * 3;
  87. a = ( pi / 4. );
  88. a =( pi / 4. ) + 2 * pi; //+ ( (pi / 2.) * 3);
  89. a =( pi / 4. ) + ( (pi / 2.) * 3);
  90. System.out.println( a +" / c="
  91. + Math.sin(a) + " / s="+ Math.sin(a));
  92. a = a%(2. * pi );
  93. System.out.println("sin a="+ a );
  94. ic= (int) ( .5 + ( ( a * (double) (precision ) / (2.*pi) ) ) );
  95. System.out.println("a/i="+ a + " " + ic );
  96. //% (precision -1) );
  97. System.out.println( ic +"=sin=" + trigo[ic] );
  98. a = ( a + (3. * (pi/2.) ) ) % ( 2. * pi );
  99. System.out.println("sin = sin a="+ a );
  100. ic= (int) ( .5 + ( ( a * (double) (precision ) / (2.*pi) ) ) );
  101. // %precision;
  102. System.out.print( ic );
  103. System.out.println( "=sin=" + trigo[ic] );
  104. //System.out.println( i +"=" + trigo[i] );
  105. }
  106. public static void print(int offset, int sinesize)
  107. {
  108. int precision = (int) Math.pow( (double) 2, (double) offset);
  109. String pre="public static final ";
  110. String post=";";
  111. double ar[] = new double[sinesize];
  112. int arint[] = new int [sinesize];
  113. double t=Math.PI;
  114. generate(ar,sinesize);
  115. toFixedPoint(ar,sinesize ,arint, precision);
  116. System.out.println( pre + "int offset="+ offset + post );
  117. System.out.println( pre + "int one="+toFixedPoint( 1.,precision) + post);
  118. //System.out.println( pre + "boundmax="+0x7FFFFF + post);
  119. //System.out.println( pre + "boundmin="+0x800000 + post);
  120. System.out.println( pre + "int PI="+toFixedPoint( Math.PI,precision) + post);
  121. System.out.println( pre + "int sqrt2="+ toFixedPoint( Math.sqrt(2.) , precision) + post);
  122. System.out.println( pre + "int sqrt3="+ toFixedPoint( Math.sqrt(3.) , precision) + post);
  123. System.out.println( pre + "int exp="+ toFixedPoint( Math.exp(1.) , precision) + post);
  124. System.out.println( pre + "int log10="+ toFixedPoint( Math.log(10) , precision) + post);
  125. System.out.println( pre + "int sinesize=" + sinesize + post);
  126. System.out.println( pre + "int sine[]=" + toString( arint, sinesize ) );
  127. }
  128. public static void main( String[] arg)
  129. {
  130. System.out.println("//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  131. print(16,32);
  132. System.out.println("//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  133. print(12,32);
  134. System.out.println("//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  135. print(8,32);
  136. System.out.println("//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  137. print(4,16);
  138. System.out.println("//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  139. print(2,8);
  140. System.out.println("//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  141. print(16,64);
  142. System.out.println("//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  143. print(10,64);
  144. }
  145. }
  146. /* #eof "$Id: MathFixedGenerator.java,v 1.4 2008-10-24 05:44:04 rzr Exp $" */