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

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

Войти
Регистрация
Восстановить пароль
 
Nike.amst
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 8
#1

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

26.01.2012, 19:52. Просмотров 381. Ответов 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++
Извиняюсь, за тупой вопрос, но какой самый большой целочисленный тип данных доступный в компиляторе visual c++ express edition 2010, по...

типы данных - C++
какой диапазон данных у main, getch? и какой тип данных у getch?

Типы данных - C++
__int64 Z = pow(a,x); long double Y = 9/Z; cout&lt;&lt;Y //Y = 0 Как вывести подробней? Добавлено через 6 минут И при Y%Z не...

типы данных - C++
int x1, x2; float summa; x1 = 5; x2 = 6; summa = (x1 + x2)/2; cout &lt;&lt; summa &lt;&lt; endl; почему в результате 5, а не...

типы данных bool - C++
уважаемые подскажите почему не компилирует функция &quot;bool shod &quot; можно ли ее чем заминить и вообще что такое shod ?

Простые типы данных - C++
Напишите программу, которая находит корни обычного квадратного уравнения

Базовые типы данных - C++
в пачке N листов бумаги размера А4 плотностью Р гр. на квадратный см. Найти вес пачки бумаги с точностью два знака после запятой

Функции и типы данных - C++
Cоздать 3 одномерных статических массива Х1, Х2, Х3 размерностями N1, N2, N3 (где N константа, определяемая в программе программистом)....

Основные типы данных - C++
1) Объявить в программе переменные и константы (выбор обосновать) для хранения следующих данных: а) площадь произвольного цилиндра, ...

Абстрактные типы данных - C++
Реализуйте работу с текстовым файлом, как с однонаправленным списком символов.


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

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

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