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

#c #math #pow

#c #математика #pow

Вопрос:

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

 #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

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

Комментарии:

1. floatcopy = floatcopy * pow(10, — показатель степени);

2. Я думаю, что ваш вопрос вводит в заблуждение: pow действительно дает ожидаемый результат. Ваш вопрос должен быть: «Почему мой код не делает то, что я хочу?». Возможно, пример «если сомневаетесь, ищите ошибку в себе , а не в компиляторе / стандартной библиотеке / языке».

Ответ №1:

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

Ответ №2:

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

попробуйте:

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

Ответ №3:

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

Для этого вам следует сделать:

 floatcopy *= pow(10,-exponent);
  

Ответ №4:

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