Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
28th
Янв
Разный результат в Borland C++ 5.02 и Visual C++ 2012
Posted by maloy under c/c++
Если в консоль ввести 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
Rififi
возможно разный размер int’ов (борланда в глаза не видел, так что не уверен)
проверь, чему будет равен вывод: std::cout << sizeof(int);
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)