Форум: "Прочее";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];
Внизглюки при умножении Найти похожие ветки
← →
Gydvin © (2009-06-08 21:21) [0]Доброе время суток
Вот собсно локализованный код при выполнении которого происходят странные вещи.
Возвращаемый результат функции "DDD" при некoторых задаваемых параметрах - меньше нуля O_o. Хотя если задать 17200 считает правильно. Мне нужно задавать размер TStream. А получается такая бадяга. Из-за чего это происходит и как с этим бороться.
Проверял на двух разных машинах. тоже самое
procedure TForm1.Button2Click(Sender: TObject);
function ddd(value: integer): integer;
begin
result := (value * 4) * (value * 4);
end;
begin
caption := inttostr(ddd(14200));
end;
← →
Gydvin © (2009-06-08 21:22) [1]да
WINXP, delphi 7
← →
vrem (2009-06-08 21:24) [2]ну так в интегере же из 32 битов 1 на знак используется, а у тебя в примере число больше чем 31 бит. longword можно использовать если 32 бита хочется
← →
Gydvin © (2009-06-08 21:39) [3]о блин! пасиб! что-то не подумал
← →
AndreyV © (2009-06-09 05:00) [4]> [2] vrem (08.06.09 21:24)
> ну так в интегере же из 32 битов 1 на знак используется
Это не так.
← →
@!!ex © (2009-06-09 09:42) [5]> [4] AndreyV © (09.06.09 05:00)
> Это не так.
Вы сломали мои знания о машинном представлении целых знаковых.
А как?
← →
AndreyV © (2009-06-09 10:34) [6]> [5] @!!ex © (09.06.09 09:42)
> > [4] AndreyV © (09.06.09 05:00)
> > Это не так.
>
> Вы сломали мои знания о машинном представлении целых знаковых.
> А как?
Я вот о чём.
Не корректно говорить для знакового целого "из 32 битов 1 на знак используется", это означает
+1(10) 00000001(16)
-1(10) 80000001(16)
а так же подразумевает два нуля
+0(10) 00000000(16)
-0(10) 80000000(16)
На самом деле и аппаратно в x86
+1(10) 00000001(16)
-1(10) ffffffff(16)
← →
sniknik © (2009-06-09 13:13) [7]> Не корректно говорить для знакового целого "из 32 битов 1 на знак используется", это означает
корректно. там действительно 32 бита и действительно 1 из них признак знака
> а так же подразумевает два нуля
не подразумевает. это только твоя интерпретация числа. твое неправильное понимание, а на самом деле
> -1(10) 80000001(16)
это не -1
а это
> -0(10) 80000000(16)
не -0
но тем не менее это нормальные отрицательные (используется признак) числа.
> На самом деле и аппаратно в x86
а вот тут угадал.
и кстати ты подписываешь (16) а числа приводишь в (32).
p.s. я в ответе за свои слова, а не за то, что вы подумали. @ Бомарше
← →
AndreyV © (2009-06-09 14:15) [8]> [7] sniknik © (09.06.09 13:13)
> > Не корректно говорить для знакового целого "из 32 битов 1 на знак используется"
> корректно. там действительно 32 бита и действительно 1 из них признак знака
Ну признак, хотя для понимания сабжа требуется уточнение.
> > а так же подразумевает два нуля
> не подразумевает. это только твоя интерпретация числа. твое неправильное понимание, а на самом деле
Вот и я об интерпретации.
> > -1(10) 80000001(16)
> это не -1
> а это
> > -0(10) 80000000(16)
> не -0
> но тем не менее это нормальные отрицательные (используется признак) числа.
>
> > На самом деле и аппаратно в x86
> а вот тут угадал.
Ага, на кофейной гуще.
> и кстати ты подписываешь (16) а числа приводишь в (32).
16 - основание системы исчисления в которой записано для краткости побитное представление числа
> p.s. я в ответе за свои слова, а не за то, что вы подумали.
> @ Бомарше
Ну да.:)
Вобщем всё к тому, что в том представлении, какое есть (забыл как оно называется), вычитание становится не нужным и реализуется сложением, и ноль остаётся один и отрицательных чисел на одно больше, чем положительных. А вот принятой в математике записи не соответсвует.
← →
Sapersky (2009-06-09 17:00) [9]Включённый в настройках проекта overflow checking такое должен ловить.
← →
sniknik © (2009-06-09 19:08) [10]> Ну признак, хотя для понимания сабжа требуется уточнение.
ну и уточнял бы, а не говорил, что "это не так".
> 16 - основание системы исчисления в которой записано для краткости побитное представление числа
16 это ffff, посчитай
а ты пишешь
> -1(10) ffffffff(16)
в 2 раза больше. т.е. 32.
ты бы лучше пытался понять, что говорят, а не бросался прописными истинами непонятно к чему относящимися.
> А вот принятой в математике записи не соответсвует.
если бы говорили про математику то признаком отрицательного числа назвали бы минус (-) стоящий перед числом.
← →
AndreyV © (2009-06-09 20:39) [11]> [10] sniknik © (09.06.09 19:08)
Да, сразу не уточнил, вот ты и добавил точности. А с 16 против 32: я так и не понял - как связана разрядность с формой записи в моём посте - ведь в сабже говорилось о 32-х битах, а 16, как я уже уточнил - основание системы исчисления (там, в предыдущем посте).
Да и действительно - не стоит мусолить далее эти прописные истины.
← →
AndreyV © (2009-06-10 02:55) [12]> [11] AndreyV © (09.06.09 20:39)
> основание системы исчисления
основание системы счисления
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c