Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

очередной баг компилятора?

2 views
Skip to first unread message

Slava Gordienko

unread,
Nov 18, 2008, 12:30:58 PM11/18/08
to
Hello, All !

Интересно, эха ещё жива?...

Итак, имеем следующий тест:

==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

В университете трудно учиться только первые восемь лет.

Alexey Popov

unread,
Nov 18, 2008, 8:23:29 AM11/18/08
to
Slava Gordienko wrote:

> const double t2 = 145.6;

Потому что это число не может быть точно представлено типом double.


--

Sergei Andreev

unread,
Nov 18, 2008, 9:19:28 AM11/18/08
to
Это не баг компилятора, это баг в твоём образовании,
в частности, что касается особенностей представления
десятичных дробей в двоичном виде


Dmytry Ginzburg

unread,
Nov 18, 2008, 2:13:24 PM11/18/08
to
Здравствуйте, о моногоуважаемый(ая), Sergei!
Вот.. Hабил письмецо.. А вот, что из этого вышло:

Как-то, Вторник, Ноябрь 18 2008, в 17:19, Sergei Andreev приехал к Slava
Gordienko на белом лимузине, да как заорёт _"Re: очередной баг компилятора?"_

SA> Это не баг компилятора, это баг в твоём образовании,
SA> в частности, что касается особенностей представления
SA> десятичных дробей в двоичном виде

А почему ж тогда разные эффекты в билдере и MS Visual Studio? По идее для
вычислений сопроцессора они должны компилить одинаковый бинарный код, но этого
не происходит, как видно в примере.
Желаю Вам всего наилучшего, Sergei.Дмитрий.

alexander koryagin

unread,
Nov 20, 2008, 12:47:05 AM11/20/08
to
Привет, Sergei Andreev! How are you?
Во вторник восемнадцатого ноября, ты писал к Slava Gordienko насчет
"Re: очередной баг компилятора?"

SA> Это не баг компилятора, это баг в твоём образовании,
SA> в частности, что касается особенностей представления
SA> десятичных дробей в двоичном виде

Как мы любим человека лягнуть. ;=) Просто так.

[...Работал как лошадь, уставал как собака. (с) Пандем]
Bye Sergei!
Alexander
fido7.ru.cbuilder 2008


Nikolay Panfilov

unread,
Nov 20, 2008, 11:47:30 AM11/20/08
to
Привет, Slava!

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

0 new messages