Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1244565458
Rimdus
2009-06-09 20:37
2009.08.09
Перекрыть приватный метод


15-1244207036
DeadMeat
2009-06-05 17:03
2009.08.09
Каталогизатор фильмов


4-1213787176
Layner
2008-06-18 15:06
2009.08.09
Узнать Uptime свыше 49 дней...


11-1204994235
Blackman
2008-03-08 19:37
2009.08.09
[KOL-CE] Есть какие-нибудь библиотеки сжатия для KOL-CE?


2-1244553876
ganzzz
2009-06-09 17:24
2009.08.09
Как из TList сделать TCollection





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский