IEEE 754(IEC 559)浮点标准中的乘法是否x + x
可以互换加法,或者更一般地说,是否有任何保证并且总是给出完全相同的结果?2 * x
case_add
case_mul
#include <limits>
template <typename T>
T case_add(T x, size_t n)
{
static_assert(std::numeric_limits<T>::is_iec559, "invalid type");
T result(x);
for (size_t i = 1; i < n; ++i)
{
result += x;
}
return result;
}
template <typename T>
T case_mul(T x, size_t n)
{
static_assert(std::numeric_limits<T>::is_iec559, "invalid type");
return x * static_cast<T>(n);
}