2016-06-22 3 views
-1

У меня есть следующий код:Распечатайте действительно небольшое число с плавающей точкой

float test = 1/(10^(15)); 
std::cout << "test: " << test << std::endl; 

Но я получаю «тест: 0» в качестве значения. Я хочу "test: 0.000000000000001".

Как это достичь?

+2

Возможно, вы захотите попробовать double вместо float http://stackoverflow.com/questions/28045787/how-many-decimal-places-does-the-primitive-float-and-double-support – SnoozeTime

+6

'1/(10^(15)) '- Это' '' не делает то, что вы думаете. – PaulMcKenzie

+0

@PaulMcKenzie, вероятно, потому, что сайт предлагает «c» как тег, даже когда вы написали и отметили C++ уже –

ответ

8

Здесь есть несколько проблем.

10^15 

Похоже, что вы ожидаете «^», чтобы быть оператором экспоненту, то есть десять, возведенное в 15-й мощности.

Это не так. В C и C++ «^» является побитовым эксклюзивным или оператором.

Вторая проблема заключается в том, что все значения в выражении являются целыми значениями. Это означает, что (1/(10^15)) рассчитывается следующим образом:

1) 10^15 = 5, помните, что ^ действительно побито эксклюзивный или оператор.

2) 1/5 = 0, так как эти целые значения, это целочисленное деление, поэтому вы получите значение 0.

Лучший способ исправить это использовать научные обозначения:

Научная нотация служит одновременно двум целям: одному, вы получаете правильное значение, и два, это автоматически значение с плавающей запятой, поэтому деление выполняется как деление с плавающей запятой.

+0

Как я могу сделать не-базу из 10? Как с 7^15, 7 в качестве моей базы и 15 в качестве моего экспонента? – daemoner119

+4

Используйте библиотечные функции [pow()] (http://manpages.courier-mta.org/htmlman3/pow.3.html). –

+2

'1e-15' может быть приятнее, чем' 1/1e15' .... –

Смежные вопросы