Last change
on this file since 1893 was
1893,
checked in by sam, 7 years ago

math: refactor real number constant declarations so that they are only
computed on demand with static initialisation.


Property svn:keywords set to
Id

File size:
1.3 KB

Rev  Line  

[984]  1  // 

 2  // Lol Engine  Sample math program: compute Pi 

 3  // 

 4  // Copyright: (c) 20052011 Sam Hocevar <sam@hocevar.net> 

 5  // This program is free software; you can redistribute it and/or 

 6  // modify it under the terms of the Do What The Fuck You Want To 

 7  // Public License, Version 2, as published by Sam Hocevar. See 

 8  // http://sam.zoy.org/projects/COPYING.WTFPL for more details. 

 9  // 

 10  

 11  #if defined HAVE_CONFIG_H 

 12  # include "config.h" 

 13  #endif 

 14  

[1008]  15  #include <cstdio> 

 16  

[984]  17  #include "core.h" 

 18  

[1091]  19  using std::printf; 

 20  using std::sqrt; 

[984]  21  

[1091]  22  using lol::real; 

 23  

[984]  24  int main(int argc, char **argv) 

 25  { 

[1893]  26  printf("Pi: "); real::R_PI().print(); 

 27  printf("e: "); real::R_E().print(); 

 28  printf("ln(2): "); real::R_LN2().print(); 

 29  printf("sqrt(2): "); real::R_SQRT2().print(); 

 30  printf("sqrt(1/2): "); real::R_SQRT1_2().print(); 

[984]  31  

[996]  32  /* GaussLegendre computation of Pi  doesn't work well at all, 

 33  * probably because we use finite precision. */ 

 34  real a = 1.0, b = sqrt((real)0.5), t = 0.25, p = 1.0; 

[984]  35  

[996]  36  for (int i = 0; i < 3; i++) 

[989]  37  { 

[996]  38  real a2 = (a + b) * (real)0.5; 

 39  real b2 = sqrt(a * b); 

 40  real tmp = a  a2; 

 41  real t2 = t  p * tmp * tmp; 

 42  real p2 = p + p; 

 43  a = a2; b = b2; t = t2; p = p2; 

[989]  44  } 

 45  

[996]  46  real sum = a + b; 

 47  sum = sum * sum / ((real)4 * t); 

[989]  48  sum.print(); 

 49  

[984]  50  return EXIT_SUCCESS; 

 51  } 

 52  

Note: See
TracBrowser
for help on using the repository browser.