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

Типы данных в тривиальной задаче - C++

Восстановить пароль Регистрация
 
Nike.amst
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 8
26.01.2012, 19:52     Типы данных в тривиальной задаче #1
Суть задачи такова: вычислить значение дроби.

Имеются два аргумента a=100, b=0.001.

Условие: "Вычислить значение выражения при различных вещественных типах данных (float и
double). Вычисления следует выполнять с использованием промежуточных переменных.
Сравнить и объяснить полученные результаты."

Возникла проблема такого рода: все промежуточные переменные, как приведено в листинге с выводом на экран для наглядности, - при выводе видно, что они типа double, и вроде как числитель дроби выходит равным знаменателю при выполнении программы. Но с типом переменных double ответ выходит равным 1, а с float - 0.

Как это объяснить?
Считал на калькуляторе - числитель не равен знаменателю (но различие очень маленькое) .
C++
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
#include <iostream.h>
#include <math.h>
 
void main()
{
    cout<<"Laboratornaya rabota 1.1. Vypolnil student gr.KS-10 Kushnirov N.";
    cout<<"\n";
    
    double a,b,m,n,k,f,c,Z;
    cout<<"Vvedite chislo a: ";
    cin>>a;
    cout<<"Vvedite chislo b: ";
    cin>>b;
 
    m = pow((a - b),4);
    cout<<m<<"\n";
    n = pow(a,4) - 4 * pow(a,3) * b;
    cout<<n<<"\n";
    k = 6 * a * a * b * b;
    cout<<k<<"\n";
    f = 4 * a * b * b * b;
    cout<<f<<"\n";c = pow(b,4);
    
    Z = (m - n)/(k - f + c);
 
    cout<<Z<<"\n";
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2012, 19:52     Типы данных в тривиальной задаче
Посмотрите здесь:

Типы данных C++
Типы данных C++
Типы Данных C++
типы данных C++
Типы данных C++
C++ типы данных
C++ Типы данных
C++ Типы данных

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
26.01.2012, 21:10     Типы данных в тривиальной задаче #2
поставь перед выводами cout.precision(20) и увидишь, что в случае с float у m не записывается (не хватает точности) дробная часть и он оказывается равен n. в итоге числитель равен 0.
у double точность двойная и для дробной части памяти хватает. почему получается именно 1 - не разбирался.
Yandex
Объявления
26.01.2012, 21:10     Типы данных в тривиальной задаче
Ответ Создать тему
Опции темы

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