Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2014, 22:12   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию Разный результат в Borland C++ 5.02 и Visual C++ 2012

Если в консоль ввести a=32760
const int b=-333;
const int c= 1000;
const int d=-10;
double z = (2.0*a+1.0*b*c)/(d-a);

РЕЗУЛЬТАТ:
в Visual: 5
в Borland: -5
Почему разный результат?

Код:
#include <iostream>
#include <conio.h>
#include <fstream>
#include <limits.h>
using namespace std;

const char* ErrorRange = "\n!!!!!!!!!!! Limits of int value !!!!!!!!!!!\n";
inline  int     test(long int a)
     {
		 return ((a>>15)+1)&~1;
	 }

int input (int& k)
{ 
	ifstream my_inp ("CON");
	ofstream my_out ("CON");
    long int temp;
    my_inp >> temp;
	switch (my_inp.rdstate())
	{
		case ios::goodbit:
		case ios::eofbit :
		if (test (temp))
		{
			my_out << ErrorRange;
			return 1;;
		}
		k = temp;
        return 0;
		case ios::failbit:       
		case ios::badbit :
		my_out << "\n!!!!! Error input !!!!!\n";
		return 1;
	};
}

int     primC(int a, const int b, const int c, const int d)
{ 
	double z = (2.0*a+1.0*b*c)/(d-a);
	if (z > SHRT_MIN && z < SHRT_MAX) return z; 
	else
    { 
		cout << ErrorRange << "  Result x = " << z << endl;
		return SHRT_MIN;
     }
}

extern "C"
{   void prim (void);}

int X,a;

void main(void)
{   
char ch;
const int b=-333;
const int c= 1000;
const int d=-10;
int t=0;
do {
	X = 0;
	cout << "============== Test # " << ++t << " =====================" << endl;
	cout << "\n    x=(2*a+b*c)/(d-a);  int x,a,b=-333,c=1000,d=-10;" << endl;
	do
	{  
		cout<<"\n    Enter a [-32768..32767], a!= " << d << " ====> ";
		while (input(a));
	}
	while (d - a == 0 );
	cout << "\n You have entered the following value of a variable:  " << a << endl;
	X = primC(a, b, c, d);
	if (X!=SHRT_MIN)
	{
		cout << " Result (C++) x = " << X << endl;
		X = 0;
		cout << " Result (ASM) x = " << X << endl;
	}
	cout << "\n\nExit? - (y/n)\n";
	ch = getch();
	} 
	while (!(ch=='y' || ch =='Y'));
}
PS: функция test возвращает 0, если число в диапозоне -32768..32767, иначе1

Последний раз редактировалось zla9_kolu4ka; 28.01.2014 в 22:19.
zla9_kolu4ka вне форума Ответить с цитированием
Старый 28.01.2014, 22:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В старом паскале была сложность в использовании double. Приходилось либо менять на real либо выставлять опции для этого типа. В твоем случае возможно то же самое - ВС5 староват и если не ошибаюсь х16 (хотя это только предположение).
Попробуй работать с float будет результат одинаковым?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.01.2014, 22:25   #3
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Цитата:
если не ошибаюсь х16
нет, 32
Цитата:
Попробуй работать с float будет результат одинаковым?
тоже самое
zla9_kolu4ka вне форума Ответить с цитированием
Старый 28.01.2014, 22:26   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

zla9_kolu4ka

РЕЗУЛЬТАТ:
в Visual: 5
в Borland: -5
Почему разный результат?


возможно разный размер int'ов (борланда в глаза не видел, так что не уверен)
проверь, чему будет равен вывод: std::cout << sizeof(int);
Rififi вне форума Ответить с цитированием
Старый 28.01.2014, 22:40   #5
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Цитата:
возможно разный размер int'ов (борланда в глаза не видел, так что не уверен)
проверь, чему будет равен вывод: std::cout << sizeof(int);
точно, мне почему то казалось что 32 бита у обоих,спс

Последний раз редактировалось zla9_kolu4ka; 28.01.2014 в 23:00.
zla9_kolu4ka вне форума Ответить с цитированием
Старый 28.01.2014, 23:08   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
точно, мне почему то казалось что 32 бита у обоих
Я почти в яблочко
Только у меня именно в Double были похожие "переполнения"-трудности.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Studio 2010-2012 Генрюсай C/C++ Базы данных 0 29.05.2013 22:48
Результат обработки массива разный на всех компьютерах Dimansv Общие вопросы Delphi 11 24.10.2012 17:06
Разный результат в отладчике и при запуске *.exe pinkiller Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 02.05.2012 16:34
find_first_not_of выдает разный результат Torymo Помощь студентам 2 04.01.2012 09:14
разный результат Кристина133 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 13.05.2011 19:15