Я пытаюсь найти научную нотацию с двойным, и я не мог найти никакой функции или способа сделать это.
Моя переменная двойная, и мне нужно получить от нее научную нотацию, например:
3. 44828e+ 026
Мне нужно как-то получить номер 026 из моей двойной переменной.
Кстати, число на самом деле 28 длинных, а не 26, есть ли способ исправить это тоже? (не добавляя 2 к результату)
Заранее спасибо!
Это должно работать, если y
неотрицательно. Для отрицательного y
результат получается отдельно. При необходимости исправьте его.
#include <iostream>
#include <cmath>
int main()
{
double x = 3.44828e+026;
int y = (int)log10(x);
std::cout << y << std::endl;
return 0;
}
Выход: 26
Ответ аналогичен Ю Хао, но этот, похоже, работает и для отрицательных экспонентов (но я не полностью его протестировал):
#include <iostream>
#include <cmath>
// pre-condition: x != 0.0
int exponent(double x) {
double y = log10(x);
if (y < 0.0)
y -= 1.0;
return static_cast<int>(y);
}
int main() {
std::cout << exponent(3.44828e+026) << '\n';
std::cout << exponent(3.44828e-026) << '\n';
}
Выходы 26
и -26
.