#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 одновременно ?????
Димыч_:
> > 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
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Эта тема уже поднималась. НИКОГДА не сравнивай вещественные числа на равенство.
Posted via RSDN NNTP Server 1.9 beta
Здравствуйте, Евгений Коробко, Вы писали:
ЕК>Эта тема уже поднималась. НИКОГДА не сравнивай вещественные числа на равенство.
Глупость.
... << RSDN@Home 1.1.0 stable >>