тип научной нотации - PullRequest
       22

тип научной нотации

5 голосов
/ 28 ноября 2011
int s = 1e9;

Что такое тип 1e9 и насколько он точен?(Точно ли оно равно 1000000000?)

Тип печати значения / переменной в stdout будет полезен, если это возможно.

Ответы [ 3 ]

7 голосов
/ 28 ноября 2011

1e9 - это double, который имеет точное представление в представлении IEEE с плавающей запятой. Стандарт C ++ не требует IEEE с плавающей запятой.

s - это int, поэтому значение double будет автоматически преобразовано в int. Как это происходит, в некоторой степени зависит от реализации. В настоящее время на большинстве машин это преобразование означает, что s будет иметь начальное значение 1000000000.

3 голосов
/ 28 ноября 2011

Для чего это стоит, вы можете написать код, который показывает, что 1e9 имеет тип double:

#include <iostream>

void show_type(double value) { 
    std::cout << "type = double\n"; 
}
void show_type(...) {
    std::cout << "Type != double\n";
}

int main() { 
    show_type(1e9);
    return 0;
}

Конечно, если вы не знаете, какой у него тип, перегрузка для каждого возможного типа будет немного сложнее, но, тем не менее, принцип тот же.

1 голос
/ 28 ноября 2011

Если вы измените его на float или double, это будет довольно точно, но не все вычисления с ним будут точными (спасибо Kerrek SB), есть пределы точности.

Обратите внимание, что точность равна , а не свойству нотации , так или иначе, нотация сама является точностью.

...