Skip to content

Commit 1a5982e

Browse files
committed
Add basic arithmetic example
1 parent 90105f6 commit 1a5982e

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

examples/basic_arithmetic.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Copyright 2024 Matt Borland
2+
// Distributed under the Boost Software License, Version 1.0.
3+
// https://www.boost.org/LICENSE_1_0.txt
4+
//
5+
// This file demonstrates some of the basic numerical operations with the decimal types
6+
7+
#include <boost/decimal/decimal64_t.hpp> // For type decimal64_t
8+
#include <boost/decimal/cmath.hpp> // For decimal overloads of <cmath> functions
9+
#include <boost/decimal/iostream.hpp> // For decimal support of <iostream> and <iomanip>
10+
#include <iostream>
11+
#include <iomanip>
12+
13+
int main()
14+
{
15+
using boost::decimal::decimal64_t; // Type decimal64_t
16+
17+
constexpr decimal64_t a {"-5.123456891234567"}; // Constructs -5.123456 from string
18+
constexpr decimal64_t b {"3.123456891234567"}; // Constructs 3.123456 from string
19+
constexpr decimal64_t c {a + b};
20+
21+
// Here we can see that the result is exact
22+
constexpr decimal64_t neg_two {-2};
23+
static_assert(c == neg_two, "Result should be exact");
24+
25+
// We can use std::setprecision and std::numeric_limits in their usual ways
26+
std::cout << std::setprecision(std::numeric_limits<decimal64_t>::digits10)
27+
<< "A: " << a << '\n'
28+
<< "B: " << b << '\n'
29+
<< "A + B: " << c << '\n';
30+
31+
// The decimal library provides comprehensive implementations of the <cmath> functions
32+
// that you would expect to have with the builtin floating point types
33+
//
34+
// They are all located in namespace boost::decimal::,
35+
// as overloading namespace std is not allowed
36+
37+
constexpr decimal64_t abs_c {boost::decimal::abs(c)};
38+
std::cout << "abs(A + B): " << abs_c << '\n';
39+
40+
// All cmath functions are constexpr even if their std:: counterparts are not
41+
constexpr decimal64_t sqrt_two {boost::decimal::sqrt(abs_c)};
42+
43+
// Value compute by N[Sqrt[2], 50] using Wolfram Alpha or Mathematica
44+
constexpr decimal64_t wa_sqrt_two {"1.4142135623730950488016887242096980785696718753769"};
45+
std::cout << "sqrt(abs(A + B)): " << sqrt_two << '\n'
46+
<< "Wolfram Alpha sqrt(2): " << wa_sqrt_two << '\n';
47+
}

test/Jamfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ run ../examples/print.cpp ;
206206
run ../examples/promotion.cpp ;
207207
run ../examples/numerical_parsing.cpp ;
208208
run ../examples/first_example.cpp ;
209+
run ../examples/basic_arithmetic.cpp ;
209210

210211
# Test compilation of separate headers
211212
compile compile_tests/bid_conversion.cpp ;

0 commit comments

Comments
 (0)