Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2014, 12:04   #1
Uefa
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 59
По умолчанию (с++) float и double. Разные результаты.

Здравствуйте! При расчете одного и того же выражения, но с переменными разных типов данных (float и double), получаются разные результаты. Почему?
Код HTML:
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

void main ()
{
	float a=1000, b=0.0001, c, d, e;
	c = pow((a+b), 2);
	d = pow(a, 2) + 2*a*b;
	e = (c - d)/pow(b, 2);
	cout << e << "\n";

	double A=1000, B=0.0001, C, D, E;
	C = pow((A+B), 2);
	D = pow(A, 2) + 2*A*B;
	E = (C - D)/pow(B, 2);
	cout << E << "\n";

	system("pause");
};
Uefa вне форума Ответить с цитированием
Старый 20.05.2014, 12:09   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

http://xpoint.ru/know-how/Articles/FloatingPointNumbers
p51x на форуме Ответить с цитированием
Старый 20.05.2014, 12:38   #3
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

p51x дал отличную ссылку. А вообще на сколько я помню в зависимости от того какая точность нужна и используемого пространства под переменную... (32 или 64 бита), выбираешь необходимый тип (float - одинарная точность или double - двойная точность.) В статье по ссылке все неплохо описано.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 20.05.2014, 12:48   #4
Uefa
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 59
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код HTML:
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

void main ()
{
	float a=1000, b=0.0001, c, d, e, f, g;
	c = pow((a+b), 2);
	d = pow(a, 2); 
	e = 2*a*b;
	f = pow(b, 2);
	g = (c - (d + e))/f;
	cout << e << " " << g << "\n";

	double A=1000, B=0.0001, C, D, E, F, G;
	C = pow((A+B), 2);
	D = pow(A, 2);
	E = 2*A*B;
	F = pow(B, 2);
	G = (C - (D + E))/F;
	cout << E << " " << G << "\n";

	system("pause");
};
Разбил все выражение на переменные, в итоге a=A, b=B и т.д. Но значения выражений (g и G) различны. Не пойму... Прочитал по ссылке что вещественные числа получаем с погрешностью, получается, что float и double дают разные погрешности?
Uefa вне форума Ответить с цитированием
Старый 20.05.2014, 12:50   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

У float и double точность разная....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертация single float в double float kypck Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 23.04.2012 00:22
Float и Double crawter C# (си шарп) 1 19.03.2012 15:46
Идентичные функции выдают разные результаты Cannibal Помощь студентам 6 21.04.2011 18:29
Разные компиляторы - разные результаты Кипящий чайник Общие вопросы C/C++ 3 16.07.2010 14:54
float или double? zgest Общие вопросы C/C++ 10 20.03.2010 15:14