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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Gambit_88
3 / 3 / 0
Регистрация: 25.03.2011
Сообщений: 176
#1

Разница результатов float и double - C++

19.02.2014, 19:58. Просмотров 2645. Ответов 5
Метки нет (Все метки)

Объясните, пожалуйста, почему результаты для float и double отличаются?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    float a = 1000, b = 0.0001,
        c = pow(a - b, 2),
        d = pow(a, 2) - 2 * a * b,
        e = pow(b, 2);
    double a2 = 1000, b2 = 0.0001,
        c2 = pow(a2 - b2, 2),
        d2 = pow(a2, 2) - 2 * a2 * b2,
        e2 = pow(b2, 2);
    cout << "Float: " << (c - d) / e << endl;
    cout << "Double: " << (c2 - d2) / e2 << endl;
    _getch();
    return 0;
}
Float: -6.25e+006
Double: 1.00117
Второстепенно:
Как вывести результат без экспоненты?
Что значит предупреждение компилятора при инициализации float b warning C4305: инициализация: усечение из "double" к "float"?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2014, 19:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разница результатов float и double (C++):

В чем разница между Double и Float? - C++
Хмм? :(

Преобразовать 2 числа int в 1 число float(double) | double int1.int2 - C++
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

float double int - C++
Доброй ночи, препод совсем запарил, то ему не так, то ему не эдак. // 8.2.cpp: определяет точку входа для консольного приложения. // ...

Long float и double - C++
В чем отличие long float от double?

Преобразование в float и double - C++
Начал читать книгу Шилдта. В одном из его примеров было показано преобразование типов int в float. Но при компилировании выражения я...

Задание с float и double - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Russian&quot;); float fA, fB, fC, fD,...

5
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
19.02.2014, 21:21 #2
дааа
я вот попробовал так:

Здесь походу дело в точности))

Добавлено через 3 минуты
с printf()
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
#include<iostream>
#include <math.h>
#include <stdio.h>
 
using namespace std;
int main()
{
    float a = 1000, b = 0.0001,
    c = pow(a - b, 2.0),//999999.80000001
        d = pow(a, 2.0) - 2.0 * a * b,//999999.9
        e = pow(b, 2.0);//0.00000001
    double a2 = 1000, b2 = 0.0001,
        c2 = pow(a2 - b2, 2.0),
        d2 = pow(a2, 2.0) - 2.0 * a2 * b2,
        e2 = pow(b2, 2.0);
    cout << "Float: " << (c - d) / double(e) << endl;//-0.09999999
    cout << "Double: " << (c2 - d2) / e2 << endl;
    printf("%0.15f %0.15f %0.15f %0.15f", c,d,e,c-d);
    cout<<endl;
    printf("%0.15f %0.15f %0.15f %0.15f", c2,d2,e2,c2-d2);
    cout<<endl;
    
   
    return 0;
}
результат
C++
1
2
3
4
Float: -6.25e+06
Double: 1.00117
999999.750000000000000 999999.812500000000000 0.000000009999999 -0.062500000000000
999999.800000010058284 999999.800000000046566 0.000000010000000 0.000000010011718
Добавлено через 56 секунд
Походу double точнее
1
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
19.02.2014, 21:30 #3
Цитата Сообщение от Gambit_88 Посмотреть сообщение
Разница результатов float и double
а почему
C++
1
2
3
4
 char a =127;
 int  b=127;
a++;
b++;
получится a=-128
и b= 128
не возникает вопросов?
размерность чисел посмотри

Добавлено через 3 минуты
float 4байта 32 бита от 3.4E-38 до 3.4E+38
double 8 байт 64 бита от 1.7E-308 до1.7E+308
есть разница?
http://citforum.ru/programming/cpp_march/cpp_017.shtml
0
Gambit_88
3 / 3 / 0
Регистрация: 25.03.2011
Сообщений: 176
19.02.2014, 21:35  [ТС] #4
ValeryS, смотрел я на диапазон значений. Только в экспоненциальной форме не понял, влазят в него мои числа или нет...
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
19.02.2014, 21:49 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gambit_88 Посмотреть сообщение
смотрел я на диапазон значений.
кроме диапазона есть разрядность числа
смотри на пальцах показываю
32 бита
один бит отдай под знак не греши остается 31
теперь степень числи -38 +38 сколько под неё отдать ?
отдают 8 байт остается 31-8 = 23 примерно в десятичной 8 миллионов 6 знаков
байта
теперь учти что в плавающих целых чисел нет все дробные меньше 1, причем дробь не десятичная а двоичная
значит происходит округление
и в результате
1000-0.0001= никак не будет 9999.9999 знаков не хватит плюс округление
вот тебе и потеря точности
все это лучше меня Evg расписал
http://www.cyberforum.ru/blogs/18334/blog88.html
0
Evg
Эксперт CАвтор FAQ
17937 / 6168 / 411
Регистрация: 30.03.2009
Сообщений: 16,933
Записей в блоге: 27
19.02.2014, 22:07 #6
Цитата Сообщение от Gambit_88 Посмотреть сообщение
Что значит предупреждение компилятора при инициализации float b warning C4305: инициализация: усечение из "double" к "float"?
Константа 0.0001 имеет тип double, а переменная b, в которую ты записываешь константу - float. Об этом предупреждает компилятор
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 22:07
Привет! Вот еще темы с ответами:

Float/double IEEE754 - C++
Доброго вечера! Как я понимаю на вычисления с плавающей точкой влияет процессор, и компилятор языка. Как узнать поддерживает ли...

Вывод дроби double, float - C++
Подскажите пожалуйста почему в консоли выводится только 1 знак дроби(Или, возможно, вообще дробь отсекается) void...

Double / float в строку и обратно - C++
знаю есть готовые методы, мне просто интересен алгоритм, как это можно реализовать? почему то нигде не найти реализации... в конце концов...

LONG VS DOUBLE / INT VS FLOAT - C++
Всем доброго времени суток! Объясните пожалуйста почему при следующем коде #include &lt;iostream&gt; using namespace std; int main() ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
19.02.2014, 22:07
Ответ Создать тему
Опции темы

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