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) 2005-2011 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 | /* Gauss-Legendre 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.