File tree Expand file tree Collapse file tree 2 files changed +15
-41
lines changed
include/boost/decimal/detail/cmath Expand file tree Collapse file tree 2 files changed +15
-41
lines changed Original file line number Diff line number Diff line change @@ -28,22 +28,15 @@ constexpr auto log(T x) noexcept
2828 constexpr T zero { 0 , 0 };
2929 constexpr T one { 1 , 0 };
3030
31- auto result = zero ;
31+ T result { } ;
3232
3333 if (isnan (x))
3434 {
3535 result = x;
3636 }
3737 else if (isinf (x))
3838 {
39- if (!signbit (x))
40- {
41- result = x;
42- }
43- else
44- {
45- result = std::numeric_limits<T>::quiet_NaN ();
46- }
39+ result = (!signbit (x)) ? x: std::numeric_limits<T>::quiet_NaN ();
4740 }
4841 else if (x < one)
4942 {
@@ -85,8 +78,7 @@ constexpr auto log(T x) noexcept
8578 const auto z = s + s;
8679 const auto zsq = z * z;
8780
88- result = detail::log_series_expansion (zsq);
89- result = z * fma (result, zsq, one);
81+ result = z * fma (detail::log_series_expansion (zsq), zsq, one);
9082
9183 if (exp2val > 0 )
9284 {
Original file line number Diff line number Diff line change @@ -25,45 +25,29 @@ BOOST_DECIMAL_EXPORT template <typename T>
2525constexpr auto log1p (T x) noexcept
2626 BOOST_DECIMAL_REQUIRES(detail::is_decimal_floating_point_v, T)
2727{
28- const auto fpc = fpclassify (x) ;
28+ constexpr T one { 1 , 0 } ;
2929
30- constexpr T zero { 0 , 0 };
31- constexpr T one { 1 , 0 };
30+ T result { };
3231
33- auto result = zero ;
32+ const auto fpc = fpclassify (x) ;
3433
3534 if (fpc == FP_ZERO)
3635 {
3736 result = x;
3837 }
3938 else if (fpc != FP_NORMAL)
4039 {
41- if (fpc == FP_INFINITE)
42- {
43- if (signbit (x))
44- {
45- result = std::numeric_limits<T>::quiet_NaN ();
46- }
47- else
48- {
49- result = x;
50- }
51- }
52- else if (fpc == FP_NAN)
53- {
54- result = x;
55- }
40+ result =
41+ (
42+ ((fpc == FP_INFINITE) && signbit (x)) ? std::numeric_limits<T>::quiet_NaN () : x
43+ );
5644 }
5745 else if (-x >= one)
5846 {
59- if (-x == one)
60- {
61- result = -std::numeric_limits<T>::infinity ();
62- }
63- else
64- {
65- result = std::numeric_limits<T>::quiet_NaN ();
66- }
47+ result =
48+ (
49+ (-x == one) ? -std::numeric_limits<T>::infinity () : std::numeric_limits<T>::quiet_NaN ()
50+ );
6751 }
6852 else
6953 {
@@ -73,9 +57,7 @@ constexpr auto log1p(T x) noexcept
7357 }
7458 else
7559 {
76- result = detail::log1p_series_expansion (x);
77- result = fma (result, x, one);
78- result *= x;
60+ result = x * fma (detail::log1p_series_expansion (x), x, one);
7961 }
8062 }
8163
You can’t perform that action at this time.
0 commit comments