On-line: guests 0. In total there are: 0 [information..]
AuthorTopic
Bison



Post №: 71
Joined: 20.06.09
Rank: 2
link post  Posted: 19.10.09 12:18. Post subject: IPPOLIT & ROBBOLITO


Предлагаю обсудить особенности устройства Ипполита. Все-таки некаждый день появляются сильнейшие opensource программы.

Say thanks!: 1 
Profile Reply
Replys - 251 , page: 1 2 3 4 5 6 7 8 9 10 11 12 13 All [new only]


дуп



Post №: 42
Joined: 18.03.08
Rank: -1
link post  Posted: 28.10.09 10:08. Post subject: NS пишет: результат..


NS пишет:

 quote:
результат умножения будет иметь какой тип? int32 или uint64?


uint64
В это x эти сутки влезут более 6 миллиардов раз

Say thanks!: 0 
Profile Reply
bankuss
Black King


Post №: 1887
Joined: 15.07.07
Rank: 19

Awards: За плодотворную работу над оптимизацией и доводкой до ума Ипполитов!!!
link post  Posted: 28.10.09 10:12. Post subject: во фрукте сделано де..


во фрукте сделано деление /1000 и числа типа double
можно попробовать так же

Say thanks!: 0 
Profile Reply
NS
VIP


Post №: 1398
Joined: 16.09.07
Rank: 6
link post  Posted: 28.10.09 10:13. Post subject: А может всё-таки рез..


А может всё-таки результат умножения будет int32? Не знаю соглашений в этом языке, а в делфи резльтат будет 100% int32, а потом уже будет преобразовываться в int64.

Say thanks!: 0 
Profile Reply
NS
VIP


Post №: 1399
Joined: 16.09.07
Rank: 6
link post  Posted: 28.10.09 10:14. Post subject: А не проще ли умножи..


А не проще ли умножить просто на константу типа uint64 равную 1000? Вместо умножения на 1000.

Say thanks!: 0 
Profile Reply
bankuss
Black King


Post №: 1888
Joined: 15.07.07
Rank: 19

Awards: За плодотворную работу над оптимизацией и доводкой до ума Ипполитов!!!
link post  Posted: 28.10.09 10:15. Post subject: double now_real() {..


double now_real()
{
return double(GetTickCount()) / 1000.0;
}

Say thanks!: 0 
Profile Reply
NS
VIP


Post №: 1400
Joined: 16.09.07
Rank: 6
link post  Posted: 28.10.09 10:20. Post subject: Банкусс, ты о чем? u..


Банкусс, ты о чем?
uint64 tt = 1000;
x = GetTickCount() * tt;


исправляет эту ошибку.
больше ничего переписывать не надо.

Say thanks!: 0 
Profile Reply
дуп



Post №: 43
Joined: 18.03.08
Rank: -1
link post  Posted: 28.10.09 10:24. Post subject: Видел в файле cerca...


Видел в файле cerca.c подозрительное место:
TRASMISSIONE
("info time %lld nodes %lld nps %lld %s %s depth %d seldepth %d pv %s\n",
t, NODOS, nps * 1000, modificatore (BASSO, valu, ALTO, STRING3),
cp_mate (valu, STRING2), radice_abisso / 2, sd, pv);
}
В коде считаются беззнаковые типы uint64, а здесь спецификаторы формата для nodes и nps для знаковых. Маловероятно, конечно, но лучше, думаю переправить так:
("info time %I64d nodes %I64d nps %I64d %s %s depth %d seldepth %d pv %s\n",

Say thanks!: 0 
Profile Reply
WildCat
VIP


Post №: 1149
Joined: 19.10.07
Rank: 5
link post  Posted: 28.10.09 10:26. Post subject: NS А может всё-таки ..


NS

 quote:
А может всё-таки результат умножения будет int32? Не знаю соглашений в этом языке, а в делфи резльтат будет 100% int32, а потом уже будет преобразовываться в int64.


Результат умножения будет 32-битный, и будет переполнятся 20 раз в сутки.

Достаточно один из операндов преобразовать в 64 бита.

GetTickCount() * uint64(1000)

Say thanks!: 0 
Profile Reply
NS
VIP


Post №: 1401
Joined: 16.09.07
Rank: 6
link post  Posted: 28.10.09 10:28. Post subject: А вообще еще бы хоро..


А вообще еще бы хорошо заменить GetTickCount на timeGetTime.

Say thanks!: 0 
Profile Reply
NS
VIP


Post №: 1402
Joined: 16.09.07
Rank: 6
link post  Posted: 28.10.09 10:29. Post subject: WildCat пишет: Резу..


WildCat пишет:

 quote:
Результат умножения будет 32-битный, и будет переполнятся 20 раз в сутки.



Да знаю я. :)

Say thanks!: 0 
Profile Reply
bankuss
Black King


Post №: 1889
Joined: 15.07.07
Rank: 19

Awards: За плодотворную работу над оптимизацией и доводкой до ума Ипполитов!!!
link post  Posted: 28.10.09 10:30. Post subject: NS я про то, что нап..


NS я про то, что написал WildCat
WildCat пишет:

 quote:
GetTickCount() * uint64(1000)


1000 компилятор возьмет как 32-битную константу.
NS пишет:

 quote:
uint64 tt = 1000;

а так уже возьмет правильно :)

Say thanks!: 0 
Profile Reply
bankuss
Black King


Post №: 1890
Joined: 15.07.07
Rank: 19

Awards: За плодотворную работу над оптимизацией и доводкой до ума Ипполитов!!!
link post  Posted: 28.10.09 10:32. Post subject: дуп да, надо поправи..


дуп да, надо поправить. хотя у меня и с lld вроде без ошибок выводит

Say thanks!: 0 
Profile Reply
WildCat
VIP


Post №: 1150
Joined: 19.10.07
Rank: 5
link post  Posted: 28.10.09 10:35. Post subject: bankuss, int64(1000)..


bankuss, uint64(1000) - это 64-битная константа.

NS

 quote:
Да знаю я. :)



 quote:
Не знаю соглашений в этом языке


Так знаешь или нет?

Say thanks!: 0 
Profile Reply
NS
VIP


Post №: 1403
Joined: 16.09.07
Rank: 6
link post  Posted: 28.10.09 10:41. Post subject: Знаю. Это я издеваюс..


Знаю. Это я издеваюсь так. Я же выше написал что глюк в этом месте.
Точнее - не проверял, но был практически уверен что приведение типов работает также как в делфи.
bankuss пишет:

 quote:
дуп да, надо поправить. хотя у меня и с lld вроде без ошибок выводит



Нет смысла править - в этом месте всё ОК.

Say thanks!: 0 
Profile Reply
дуп



Post №: 44
Joined: 18.03.08
Rank: -1
link post  Posted: 28.10.09 10:52. Post subject: Я не знаю, чего там ..


Я не знаю, чего там у вас с WildCat- ом за левые компиляторы:
////////////////////////////////////////
#define uint64 unsigned __int64
int main()
{

uint64 number = 86400000;
uint64 big_number = number * 600;

printf("res = %I64d\n", big_number);

return 0;
}
////////////////////////////////////////////

На экране : res = 51840000000

Say thanks!: 0 
Profile Reply
WildCat
VIP


Post №: 1151
Joined: 19.10.07
Rank: 5
link post  Posted: 28.10.09 11:15. Post subject: дуп, попробуй так: ..


дуп, попробуй так:

#define uint64 unsigned __int64
#define uint32 unsigned __int32
int main()
{

uint32 number = 86400000;
uint64 big_number = number * 600;

printf("res = %I64d\n", big_number);

return 0;
}

Именно так в Ипполите.

Say thanks!: 0 
Profile Reply
дуп



Post №: 45
Joined: 18.03.08
Rank: -1
link post  Posted: 28.10.09 11:38. Post subject: Да, так не влезает. ..


Да, так не влезает.
Никогда про такое не слышал и не читал. Так и не понял почему. Даже если он при таких дефайнах неявно приводит множитель к 4-байтному типу, при чем тут результат?

Say thanks!: 0 
Profile Reply
NS
VIP


Post №: 1404
Joined: 16.09.07
Rank: 6
link post  Posted: 28.10.09 11:50. Post subject: Результат перемножен..


Результат перемножения четырехбайтных - четырехбайтное число. потеряли точность уже в процессе умножения. Понять вроде очень просто. Чтоб в результате умножения получить 64битное - нужно один из множителей привести к 64битному виду. Ты в своем примере умножаешь 64битное, поэтому у тебя всё ОК. А GetTickCount -32 битное.

Say thanks!: 0 
Profile Reply
WildCat
VIP


Post №: 1152
Joined: 19.10.07
Rank: 5
link post  Posted: 28.10.09 11:53. Post subject: Результат умножения ..


Результат умножения двух 32-битных чисел сперва записывается в 32-битный регистр, а уж затем значение из этого регистра записывается в 64-битную переменную. Естественно старшие разряды теряются.

Say thanks!: 0 
Profile Reply
дуп



Post №: 46
Joined: 18.03.08
Rank: -1
link post  Posted: 28.10.09 12:13. Post subject: NS пишет: А вторая ..


NS пишет:

 quote:
А вторая причина зависаний - это останавливаются часы. Надо смотреть где с разрядностью переменных накосячено.
uint64 x;
x = GetTickCount() * 1000;
В этом коде переполнение наверно действительно получается.


Вот где недоразумение. Вы то говорите глядя как в коде, а я только на пост NS. А у него здесть x uint64

Say thanks!: 0 
Profile Reply
Replys - 251 , page: 1 2 3 4 5 6 7 8 9 10 11 12 13 All [new only]
Тему читают:
- user online
- user offline
All times are GMT  2 Hours. Hits today: 14
You can: smiles yes, images yes, types no, poll no
avatars yes, links on, premoderation on, edit new post no