Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
XpoHoc
39 / 18 / 2
Регистрация: 10.04.2011
Сообщений: 72
#1

Вычислить значение для float при использовании pow - C++

09.01.2013, 06:24. Просмотров 319. Ответов 1
Метки нет (Все метки)

Добрый день!
При вычислении выражения двумя типами float и double столкнулся со следующей проблемой.
При использовании pow для float значения слишком отличны. Почему?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    float a = 1000, b = 0.0001;
    double a1 = 1000, b1 = 0.0001;
    
    float res;
    double res1;
 
    // Расчитываем по формуле
    float c = pow(a + b, 3);
    float d = pow(a, 3); 
    float e = 3 * a * a * b;
    float f = 3 * a * b * b;
    float g = pow(b, 3);
    
    res = (c - (d + e)) / (f + g);
    
    double c1 = pow(a1 + b1, 3);
    double d1 = pow(a1, 3); 
    double e1 = 3 * a1 * a1 * b1;
    double f1 = 3 * a1 * b1 * b1;
    double g1 = pow(b1, 3);
 
    res1 = (c1 - (d1 + e1)) / (f1 + g1);
 
    // Печатаем результат
    cout << "double: a=" << a1 << " b=" << b1 << "\n"; 
    cout << "res = " << fixed << res1 << "\n";
 
    cout << "float: a=" << a << " b=" << b << "\n"; 
    cout << "res = " << fixed << res << "\n";
    return 0;
}
Результат для float 2800000.000000
Результат для double 0.997384

Если использовать для float формулу уравнения:
C++ (Qt)
1
res = ((a * a * a + 3 * a * a * b + 3 * a * b * b + b * b * b) - (a * a * a + 3 * a * a * b)) / (3 * a * b * b + b * b * b);
Результат для float 1.001358
Компилятор VS2008.
Можно ли при использовании pow для float добится более точных результатов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2013, 06:24     Вычислить значение для float при использовании pow
Посмотрите здесь:

Вычислить значение выражения при различных вещественных типах данных (float и double) - C++
Решите пожалуйста =* Вычислить значение выражения при различных вещественных типах данных (float и double). Вычисления следует выполнять...

Хочу написать функцию pow(), ошибка: (5,27):Too few parameters in call to 'step(float,int)' - C++
Хочу написать функцию pow(), ошибка: (5,27):Too few parameters in call to 'step(float,int)' float step(float x,int n) { if(n&gt;=3)...

"Значение типа float* нельзя использовать для инициализации сущности типа float" - C++
#include &lt;math.h&gt; #include&lt;iostream&gt; #include &lt;iomanip&gt; #include&lt;conio.h&gt; using namespace std; ...

Вычислить функцию при использовании оператора for - C++
Вычислить f(x)=x^2+b, при x=-10,-9,...10 с использованием оператора for

Вычислить без pow - C++
Если можно,решите кодом.

Ошибка при использовании for_each для вектора - C++
Здравствуйте, форумчане,при компиляции возникает ошибка: c:\program files\microsoft visual studio 10.0\vc\include\algorithm(22): error...

Как присвоить переменной значение pow? - C++
Здравствуйте! У меня есть число, которое нужно возвести в большую степень (например 7 в степень 132) и взять остаток который получится...

Вычислить S=2n, без функции pow() - C++
Пишу прямо,нужно проверить решение:) Вычислить S=2^n, не используя функцию pow(). Добавлено через 2 минуты #include &lt;iostream&gt; ...

Ошибка при использовании erase для std::vector - C++
Почему в случае удаления элемента из вектора с помощью передачи итератора в erase, который соответствует позиции удаляемого элемента...

Проблемы при использовании указателей для работы со строками - C++
#include &lt;iostream&gt; using namespace std; int main() { char src; cin &gt;&gt; src; // введення рядка до...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3115 / 1917 / 207
Регистрация: 13.01.2012
Сообщений: 7,331
09.01.2013, 13:35     Вычислить значение для float при использовании pow #2
если измените схему расчета - может быть. у вас даже b для float еще до расчета уже не равно 0,0001. а потом начинается вычитания близких по величине значений и деление на жутко маленькое число. это все равно что предел в лоб на компьютере пытаться вычислить
Yandex
Объявления
09.01.2013, 13:35     Вычислить значение для float при использовании pow
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru