Re: Вот простейшие вычисления
От: ssm Россия  
Дата: 16.07.04 07:35
Оценка: 1 (1)
Здравствуйте, Димыч_, Вы писали:

присоединяюсь к существующим ответам и советую глянуть в добавок на numeric_limits<T>::epsilon()
Вот простейшие вычисления
От: Димыч_  
Дата: 15.07.04 22:56
Оценка:
#include <math.h>
#include <fstream>
#include <cstdlib>
#include <iostream>
int main(){
int year=1932,iA,iB,iC;
double Af=year/343.0*365.25;
double A,a,Bf,B,b,Cf,C,c,iRhY;
    a=modf(Af,&A);
    iA=round(A);
    Bf=a*343.0/7.0;
    b=modf(Bf,&B);
    iB=round(B);
    iRhY=a*343;
    Cf=b*7.0;
    c=modf(Cf,&C);
    iC=round(C);
std::cout<<"; A:"<<Af<<","<<A<<","<<a<<"; B:"<<Bf<<", "<<B<<", "<<b<<", "<<iB<<"; C:"<<Cf<<", "<<C<<", "<<c<<", "<<iC<<"\n";
std::cout<<" C==iC?"<<(C==iC)<<"\n";
std::cout<<" c==1?"<<(c==1)<<"; b==1?"<<(b==1)<<"\n";
return 0;
}


Мои результаты:
; A:2057.33,2057,0.326531; B:16, 15, 1, 15; C:7, 6, 1, 6
C==iC?1
c==1?0; b==1?0

gcc 3.2.3 (slackware 9.1) и mingw gcc 3.3.1 (win2K)
Объясните тупому, почему дробная часть равна и не равна 1 одновременно ?????
Re: Вот простейшие вычисления
От: Павел Кузнецов  
Дата: 16.07.04 02:25
Оценка:
Димыч_:

>
>     b=modf(Bf,&B);
>     . . .
>     c=modf(Cf,&C);
> std::cout<< "; B: "<< b << "; C: " << c <<"\n";
> std::cout<<" c==1?"<<(c==1)<<"; b==1?"<<(b==1)<<"\n";
>

>
> Мои результаты:
> ; B: 1; C: 1
> c==1?0; b==1?0
>
> почему дробная часть равна и не равна 1 одновременно ?????

В данном случае при сравнении чисел плавающих типов на строгое равенство ты получаешь не те результаты, которые ожидаешь, т.к. эти числа равны 1 неточно. Для целей же вывода они округляются. Используй сравнение разности этих чисел с 1 и некоторым маленьким числом.
Posted via RSDN NNTP Server 1.9 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: Вот простейшие вычисления
От: Евгений Коробко  
Дата: 16.07.04 05:06
Оценка:
Эта тема уже поднималась. НИКОГДА не сравнивай вещественные числа на равенство.
Posted via RSDN NNTP Server 1.9 beta
Евгений Коробко
Re[2]: Вот простейшие вычисления
От: Шахтер Интернет  
Дата: 17.07.04 00:12
Оценка:
Здравствуйте, Евгений Коробко, Вы писали:

ЕК>Эта тема уже поднималась. НИКОГДА не сравнивай вещественные числа на равенство.


Глупость.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.