Интересно, эха ещё жива?...
Итак, имеем следующий тест:
==cut==
#include <iostream>
using namespace std;
int main()
{
const double t1 = 10.0;
const double t2 = 145.6;
int t3 = t1 * t2;
double t4 = t1 * t2;
int t5 = t4;
cout << t3 << endl;
cout << t5 << endl;
}
==cut==
При компиляции bcb 5.5.1 он выдаёт:
1455
1456
msvs:
1456
1456
Почему в первом случае происходит так? Попытки использовать static_cast в
разных вариантах результат не изменили...
WBR, Slava Gordienko
В университете трудно учиться только первые восемь лет.
> const double t2 = 145.6;
Потому что это число не может быть точно представлено типом double.
--
Как-то, Вторник, Ноябрь 18 2008, в 17:19, Sergei Andreev приехал к Slava
Gordienko на белом лимузине, да как заорёт _"Re: очередной баг компилятора?"_
SA> Это не баг компилятора, это баг в твоём образовании,
SA> в частности, что касается особенностей представления
SA> десятичных дробей в двоичном виде
А почему ж тогда разные эффекты в билдере и MS Visual Studio? По идее для
вычислений сопроцессора они должны компилить одинаковый бинарный код, но этого
не происходит, как видно в примере.
Желаю Вам всего наилучшего, Sergei.Дмитрий.
SA> Это не баг компилятора, это баг в твоём образовании,
SA> в частности, что касается особенностей представления
SA> десятичных дробей в двоичном виде
Как мы любим человека лягнуть. ;=) Просто так.
[...Работал как лошадь, уставал как собака. (с) Пандем]
Bye Sergei!
Alexander
fido7.ru.cbuilder 2008
18 ноября 2008 (20:30) Slava Gordienko -> All:
SG> Итак, имеем следующий тест:
SG> ==cut==
SG> #include <iostream>
SG> using namespace std;
SG> int main()
SG> {
SG> const double t1 = 10.0;
SG> const double t2 = 145.6;
SG> int t3 = t1 * t2;
SG> double t4 = t1 * t2;
SG> int t5 = t4;
SG> cout << t3 << endl;
SG> cout << t5 << endl;
SG> }
SG> ==cut==
SG> При компиляции bcb 5.5.1 он выдаёт:
SG> 1455
SG> 1456
SG> msvs:
SG> 1456
SG> 1456
SG> Почему в первом случае происходит так? Попытки использовать static_cast в
SG> разных вариантах результат не изменили...
потому же почему все плавучку проверяют не на равенство а на нахождение в одном
диапазоне. если хочешь получить максимально достоверный результат ─
целочисленка и перевод в плавучку при выводе результата для дальнейшего
использования.
если кто-то подскажет более кардинальный/менее топорный способ ─ с превеликим
удовольствием почитаю.
С пожеланиями, Nikolay