31 stream <<
"Wow, floating-point division by zero!! r2 = " << r2 <<
endl;
53 stream <<
"Indeterminate State - INVALID floating point operation" <<
endl;
57 stream <<
"Determinate State - VALID floating-point operation" <<
endl;
67template<
typename Type>
76 os <<
"floating-point operation failed - a = "
85template<
typename Type>
94 os <<
"floating-point operation failed - a = "
103template<
typename Type>
112 os <<
"floating-point operation failed - a = "
113 << a <<
", b = " << b;
121template<
typename Type>
130 os <<
"floating-point operation failed - a = "
131 << a <<
", b = " << b;
143 double d1 = INFINITY;
144 double d2 = INFINITY;
145 double d3 = -INFINITY;
148 stream << d1 <<
" + " << d2 <<
" = " << r1 <<
endl;
151 stream << d1 <<
" - " << d3 <<
" = " << r2 <<
endl;
157 stream << d4 <<
" / " << d5 <<
" = " << r3 <<
endl;
159 catch(std::exception& e)
types::enable_if_real_number_t< Type > safe_mul(Type a, Type b)
void examine_integer_float_difference()
types::enable_if_real_number_t< Type > safe_sub(Type a, Type b)
types::enable_if_real_number_t< Type > safe_add(Type a, Type b)
void examples_for_safe_floating_point_arithmetic()
types::enable_if_real_number_t< Type > safe_div(Type a, Type b)
Defines safe type operation.
Type to string name conversions are defined.
hidden::enable_if_real_number_t< Type, ReturnType > enable_if_real_number_t
Stream output operators << are implemented.
This file implements safe arithmetic.
#define Tpf_ThrowDebugException(debug_message)
Throw a debug_exception with message as argument.