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

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

Восстановить пароль Регистрация
 
XpoHoc
 Аватар для XpoHoc
39 / 18 / 2
Регистрация: 10.04.2011
Сообщений: 72
09.01.2013, 06:24     Вычислить значение для float при использовании pow #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
Посмотрите здесь:

Вычислить без pow C++
C++ при вызове функции pow() выдаёт ошибку: test.cpp:(.text+0x59b): undefined reference to `pow'
Хочу написать функцию pow(), ошибка: (5,27):Too few parameters in call to 'step(float,int)' C++
опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing C++
Вычислить функцию при использовании оператора for C++
C++ Вычислить значение выражения при различных вещественных типах данных (float и double)
Ошибка при использовании for_each для вектора C++
C++ Не правильное значение при использовании {setlocale (LC_ALL, "Russian");

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

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

Текущее время: 08:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru