Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос на знание школьного курса C++

Великодержавный шовинизм Мудрец (10798), закрыт 16 лет назад
А именно: вот есть выражение
(pow((a-b),2)-(a*a-2*a*b))/(b*b);
Нужно объяснить, почему результаты отличаются при различных типах исходных данных (float и double). В обоих случаях a=1000, b=0.0001.
Вроде float и double - вещественные типы, различаются только точностью и максимальным количеством разрядов числа; но ведь исходные данные одинаковы при любом типе, почему результат-то разный?
И вообще, если раскрыть скобки в числителе, получается (b*b)/(b*b). По идее, всегда 1 должна быть в ответе, независимо от операндов. С целыми так и есть, а вот с дробными...
Короче, объясните, пожалуйста, кто особо добрый.
Дополнен 17 лет назад
Вот программка:
#include<iostream.h>
#include<conio.h>
main()
{
clrscr();
double b=0.0001;
cout << b;
cout << "\n";
cout << b*b;
}
А вот, что она выдает:
1e-04
9.999999e-09
Так вот почему первое в квадрате выдает второе, я никак не пойму. Кто-нибудь объяснить может?
Saga Мыслитель (7980) 17 лет назад
ne poverish... vot zakon4ila shkolu i vsya eta labuda ni razu ne prigodilas=))) sej4as dumau, lu4she bi knig pobol'she 4itala, vmesto breda etogo...=(
Павел Желтяков Мастер (1990) 17 лет назад
А уверен что у float b = 0.0001 после присвоения ? Вполне может оказаться что-то вроде 0.00009998
попробуй выведи на экран, а также чему будет равно b * b ...

аналогичное проделай для double, почуствуй разницу :)
Похожие вопросы