Использование pow дает неожиданный результат

Я пытаюсь использовать функцию pow в С++, но результат не тот, который я ожидаю. Фрагмент:

#include <math.h>
float floatcopy = boost::lexical_cast<float>(copy); //Then floatcopy is 2.300000    
float exponent = boost::lexical_cast<float>(copy[foundEXP+1]); // Then exponent is 5.00000    
floatcopy = pow(floatcopy*10,-exponent);

Теперь, когда я набираю 2,3 * 10 ^ -5 на своем калькуляторе (или в голове ...), я получаю, как и ожидалось: 0,0000230.

Вышеупомянутые результаты в 1.5536773e-007

В чем здесь проблема??


person Lumpi    schedule 31.10.2011    source источник
comment
floatcopy = floatcopy * pow(10, -exponent);   -  person Hans Passant    schedule 31.10.2011
comment
Я думаю, что ваш вопрос вводит в заблуждение: pow действительно дает ожидаемый результат. Ваш вопрос должен быть, почему мой код не делает то, что я хочу? Возможно, если вы сомневаетесь, ищите ошибку в себе, а не в компиляторе/стандартной библиотеке/языке.   -  person Kerrek SB    schedule 31.10.2011


Ответы (4)


Ваш калькулятор вычисляет 2,3*(10^-5). В вашем коде вы вычисляете (2,3 * 10) ^ -5.

person Henrik    schedule 31.10.2011

Похоже, вы вычисляете (2,3*10)^-5 вместо 2,3*10^-5.

пытаться:

floatcopy = floatcopy*pow(10,-exponent);

person Henrik    schedule 31.10.2011

Вы неправильно используете функцию pow. То, что вы на самом деле делаете, это (2,3 * 10) ^ -5, а то, что вы пытаетесь сделать (если я не ошибаюсь), это 2,3 * (10 ^ -5).

Для этого вы должны сделать:

floatcopy *= pow(10,-exponent);
person Josep Rodríguez López    schedule 31.10.2011

23 в степени минус пять дает результат, который вы получаете....

person Martin James    schedule 31.10.2011