Научная запись определяет, как числа должны отображаться с использованием знака, числа и показателя степени, но не указывает, что визуализация нормализована.
Пример: -2.34e-2 (нормализованная научная запись) - это то же самое, что и -0.234e-1 (научная запись)
Могу ли я полагаться на следующий код, всегда производящий нормализованный результат? Редактировать: за исключением NAN и INF, как указано в ответах.
template<typename T>
static std::string toScientificNotation(T number, unsigned significantDigits)
{
if (significantDigits > 0) {
significantDigits--;
}
std::stringstream ss;
ss.precision(significantDigits);
ss << std::scientific << number;
return ss.str();
}
Если да, перечислите раздел в документации / стандарте C ++, указав, что это не платформа / реализация-определены.Поскольку значение 0 также представлено по-разному, я боюсь, что некоторые очень маленькие числа (денормализованные ?!) могут быть визуализированы по-разному.На моей платформе с моим компилятором в настоящее время он работает для std :: numeric_limits :: min (), denorm_min ().
Примечание: я использую это, чтобы найти порядок величины числа, не путаясь со всеми причудливымидетали анализа чисел с плавающей запятой.Я хотел, чтобы стандартная библиотека сделала это для меня: -)