commit 484e148cde4e81efbfff8b67c6c51e0f48c6bcad Author: ZhuangYumin Date: Wed Jan 17 15:30:47 2024 +0800 calculate 1000000 numbers diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e415ca --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +# IDE +.vscode/ +uncrustify.cfg + +# Xmake cache +.xmake/ +build/ + +# MacOS Cache +.DS_Store + + diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..ab3bdde --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,36 @@ +#include +#include "mpfr.h" + +using namespace std; + +int main(int argc, char **argv) { + mpfr_t a_0, b_0, s_0, a_k, b_k, s_k, approx_pi, tmp_1, tmp_2; + mpfr_inits2(3600000, a_0, b_0, s_0, a_k, b_k, s_k, approx_pi, tmp_1, tmp_2, NULL); + mpfr_set_d(a_0, 1.0, MPFR_RNDF); + mpfr_sqrt_ui(b_0, 2, MPFR_RNDF); + mpfr_div_ui(b_0, b_0, 2, MPFR_RNDF); + mpfr_set_d(s_0, 0.5, MPFR_RNDF); + for (int k = 1; k <= 20; k++) { + mpfr_add(a_k, a_0, b_0, MPFR_RNDF); + mpfr_div_ui(a_k, a_k, 2, MPFR_RNDF); + + mpfr_mul(b_k, a_0, b_0, MPFR_RNDF); + mpfr_sqrt(b_k, b_k, MPFR_RNDF); + + mpfr_add(tmp_1, a_k, b_k, MPFR_RNDF); + mpfr_sub(tmp_2, a_k, b_k, MPFR_RNDF); + mpfr_mul(tmp_1, tmp_1, tmp_2, MPFR_RNDF); + mpfr_ui_pow_ui(tmp_2,2, k, MPFR_RNDF); + mpfr_mul(tmp_1, tmp_1, tmp_2, MPFR_RNDF); + mpfr_sub(s_k, s_0, tmp_1, MPFR_RNDF); + + mpfr_set(a_0, a_k, MPFR_RNDF); + mpfr_set(b_0, b_k, MPFR_RNDF); + mpfr_set(s_0, s_k, MPFR_RNDF); + } + mpfr_mul(approx_pi, a_0, a_0, MPFR_RNDF); + mpfr_mul_ui(approx_pi, approx_pi, 2, MPFR_RNDF); + mpfr_div(approx_pi, approx_pi, s_0, MPFR_RNDF); + mpfr_printf("%.1000000Rf\n", approx_pi); + return 0; +} \ No newline at end of file diff --git a/xmake.lua b/xmake.lua new file mode 100644 index 0000000..d05a0e5 --- /dev/null +++ b/xmake.lua @@ -0,0 +1,80 @@ +add_rules("mode.debug", "mode.release") + +add_requires("mpfr") + +target("PiCalculatorCpp") + set_kind("binary") + set_languages("c99", "c++11") + set_optimize("fastest") + add_packages("mpfr") + add_files("src/*.cpp") + +-- +-- If you want to known more usage about xmake, please see https://xmake.io +-- +-- ## FAQ +-- +-- You can enter the project directory firstly before building project. +-- +-- $ cd projectdir +-- +-- 1. How to build project? +-- +-- $ xmake +-- +-- 2. How to configure project? +-- +-- $ xmake f -p [macosx|linux|iphoneos ..] -a [x86_64|i386|arm64 ..] -m [debug|release] +-- +-- 3. Where is the build output directory? +-- +-- The default output directory is `./build` and you can configure the output directory. +-- +-- $ xmake f -o outputdir +-- $ xmake +-- +-- 4. How to run and debug target after building project? +-- +-- $ xmake run [targetname] +-- $ xmake run -d [targetname] +-- +-- 5. How to install target to the system directory or other output directory? +-- +-- $ xmake install +-- $ xmake install -o installdir +-- +-- 6. Add some frequently-used compilation flags in xmake.lua +-- +-- @code +-- -- add debug and release modes +-- add_rules("mode.debug", "mode.release") +-- +-- -- add macro definition +-- add_defines("NDEBUG", "_GNU_SOURCE=1") +-- +-- -- set warning all as error +-- set_warnings("all", "error") +-- +-- -- set language: c99, c++11 +-- set_languages("c99", "c++11") +-- +-- -- set optimization: none, faster, fastest, smallest +-- set_optimize("fastest") +-- +-- -- add include search directories +-- add_includedirs("/usr/include", "/usr/local/include") +-- +-- -- add link libraries and search directories +-- add_links("tbox") +-- add_linkdirs("/usr/local/lib", "/usr/lib") +-- +-- -- add system link libraries +-- add_syslinks("z", "pthread") +-- +-- -- add compilation and link flags +-- add_cxflags("-stdnolib", "-fno-strict-aliasing") +-- add_ldflags("-L/usr/local/lib", "-lpthread", {force = true}) +-- +-- @endcode +-- +