-
Notifications
You must be signed in to change notification settings - Fork 8
/
example000a_multiply_pi_squared.cpp
83 lines (67 loc) · 3.86 KB
/
example000a_multiply_pi_squared.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
///////////////////////////////////////////////////////////////////
// Copyright Christopher Kormanyos 2020 - 2022. //
// Distributed under the Boost Software License, //
// Version 1.0. (See accompanying file LICENSE_1_0.txt //
// or copy at http://www.boost.org/LICENSE_1_0.txt) //
///////////////////////////////////////////////////////////////////
#include <cstdint>
#include <examples/example_decwide_t.h>
#include <math/wide_decimal/decwide_t.h>
#if defined(WIDE_DECIMAL_NAMESPACE)
auto WIDE_DECIMAL_NAMESPACE::math::wide_decimal::example000a_multiply_pi_squared() -> bool
#else
auto ::math::wide_decimal::example000a_multiply_pi_squared() -> bool
#endif
{
constexpr std::int32_t wide_decimal_digits10 = INT32_C(1001);
#if defined(WIDE_DECIMAL_NAMESPACE)
using float_type = WIDE_DECIMAL_NAMESPACE::math::wide_decimal::decwide_t<wide_decimal_digits10>;
#else
using float_type = ::math::wide_decimal::decwide_t<wide_decimal_digits10>;
#endif
const float_type my_pi
{
"3."
"1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679"
"8214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196"
"4428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273"
"7245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094"
"3305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912"
"9833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132"
"0005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235"
"4201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859"
"5024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303"
"5982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989"
"38"
};
const float_type pi_sq = my_pi * my_pi;
const float_type control
{
"9."
"8696044010893586188344909998761511353136994072407906264133493762200448224192052430017734037185522318"
"2402591377402314407777234812203004672761061767798519766099039985620657563057150604123284032878086935"
"2769342164939666571519044538735261779413820258260581693412515592048309818873270033076266671104358950"
"8715041003257885365952763577528379226833187450864045463541250269737295669583342278581500063652270954"
"7249085975607266926475277900528533645220666980826415896877105732788929174690154551006925443245703644"
"9656172537928607606008145972589229232414240044295981361814413706777778194739658303170856632789570753"
"4079917145231589263721144638282644328528037928503480952338995039685746094853460090177429322057990359"
"1735782046575804193168682300219614689927042061429696346600579984035164213654304998453372173655724046"
"3676848876261512299027059938010299446886181716260980130876530037060158369198676286005079936468322669"
"7315683671755589711987529752963949163155394491954838770687211307898665755909865363656307636308806115"
"01"
};
const float_type ratio = pi_sq / control;
const float_type closeness = fabs(1 - ratio);
const auto result_is_ok = closeness < (std::numeric_limits<float_type>::epsilon() * static_cast<std::uint32_t>(UINT8_C(10)));
return result_is_ok;
}
// Enable this if you would like to activate this main() as a standalone example.
#if defined(WIDE_DECIMAL_STANDALONE_EXAMPLE000A_MULTIPLY_PI_SQUARED)
#include <iomanip>
#include <iostream>
auto main() -> int
{
const auto result_is_ok = ::math::wide_decimal::example000a_multiply_pi_squared();
std::cout << "result_is_ok: " << std::boolalpha << result_is_ok << std::endl;
}
#endif