Author | Topic |
Bison
|
| |
Post №: 71
Joined: 20.06.09
Rank:
2
|
|
Posted: 19.10.09 12:18. Post subject: IPPOLIT & ROBBOLITO
Предлагаю обсудить особенности устройства Ипполита. Все-таки некаждый день появляются сильнейшие opensource программы.
|
|
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
|
|
Posted: 28.10.09 10:08. Post subject: NS пишет: результат..
NS пишет: quote: | результат умножения будет иметь какой тип? int32 или uint64? |
| uint64 В это x эти сутки влезут более 6 миллиардов раз
|
|
Profile
Reply
|
bankuss
|
| Black King
|
Post №: 1887
Joined: 15.07.07
Rank:
19
Awards:
|
|
Posted: 28.10.09 10:12. Post subject: во фрукте сделано де..
во фрукте сделано деление /1000 и числа типа double можно попробовать так же
|
|
Profile
Reply
|
NS
|
| VIP
|
Post №: 1398
Joined: 16.09.07
Rank:
6
|
|
Posted: 28.10.09 10:13. Post subject: А может всё-таки рез..
А может всё-таки результат умножения будет int32? Не знаю соглашений в этом языке, а в делфи резльтат будет 100% int32, а потом уже будет преобразовываться в int64.
|
|
Profile
Reply
|
NS
|
| VIP
|
Post №: 1399
Joined: 16.09.07
Rank:
6
|
|
Posted: 28.10.09 10:14. Post subject: А не проще ли умножи..
А не проще ли умножить просто на константу типа uint64 равную 1000? Вместо умножения на 1000.
|
|
Profile
Reply
|
bankuss
|
| Black King
|
Post №: 1888
Joined: 15.07.07
Rank:
19
Awards:
|
|
Posted: 28.10.09 10:15. Post subject: double now_real() {..
double now_real() { return double(GetTickCount()) / 1000.0; }
|
|
Profile
Reply
|
NS
|
| VIP
|
Post №: 1400
Joined: 16.09.07
Rank:
6
|
|
Posted: 28.10.09 10:20. Post subject: Банкусс, ты о чем? u..
Банкусс, ты о чем? uint64 tt = 1000; x = GetTickCount() * tt; исправляет эту ошибку. больше ничего переписывать не надо.
|
|
Profile
Reply
|
дуп
|
| |
Post №: 43
Joined: 18.03.08
Rank:
-1
|
|
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",
|
|
Profile
Reply
|
WildCat
|
| VIP
|
Post №: 1149
Joined: 19.10.07
Rank:
5
|
|
Posted: 28.10.09 10:26. Post subject: NS А может всё-таки ..
NS quote: | А может всё-таки результат умножения будет int32? Не знаю соглашений в этом языке, а в делфи резльтат будет 100% int32, а потом уже будет преобразовываться в int64. |
| Результат умножения будет 32-битный, и будет переполнятся 20 раз в сутки. Достаточно один из операндов преобразовать в 64 бита. GetTickCount() * uint64(1000)
|
|
Profile
Reply
|
NS
|
| VIP
|
Post №: 1401
Joined: 16.09.07
Rank:
6
|
|
Posted: 28.10.09 10:28. Post subject: А вообще еще бы хоро..
А вообще еще бы хорошо заменить GetTickCount на timeGetTime.
|
|
Profile
Reply
|
NS
|
| VIP
|
Post №: 1402
Joined: 16.09.07
Rank:
6
|
|
Posted: 28.10.09 10:29. Post subject: WildCat пишет: Резу..
WildCat пишет: quote: | Результат умножения будет 32-битный, и будет переполнятся 20 раз в сутки. |
| Да знаю я. :)
|
|
Profile
Reply
|
bankuss
|
| Black King
|
Post №: 1889
Joined: 15.07.07
Rank:
19
Awards:
|
|
Posted: 28.10.09 10:30. Post subject: NS я про то, что нап..
NS я про то, что написал WildCat WildCat пишет: quote: | GetTickCount() * uint64(1000) |
| 1000 компилятор возьмет как 32-битную константу. NS пишет: а так уже возьмет правильно :)
|
|
Profile
Reply
|
|
bankuss
|
| Black King
|
Post №: 1890
Joined: 15.07.07
Rank:
19
Awards:
|
|
Posted: 28.10.09 10:32. Post subject: дуп да, надо поправи..
дуп да, надо поправить. хотя у меня и с lld вроде без ошибок выводит
|
|
Profile
Reply
|
WildCat
|
| VIP
|
Post №: 1150
Joined: 19.10.07
Rank:
5
|
|
Posted: 28.10.09 10:35. Post subject: bankuss, int64(1000)..
bankuss, uint64(1000) - это 64-битная константа. NS quote: | Не знаю соглашений в этом языке |
| Так знаешь или нет?
|
|
Profile
Reply
|
NS
|
| VIP
|
Post №: 1403
Joined: 16.09.07
Rank:
6
|
|
Posted: 28.10.09 10:41. Post subject: Знаю. Это я издеваюс..
Знаю. Это я издеваюсь так. Я же выше написал что глюк в этом месте. Точнее - не проверял, но был практически уверен что приведение типов работает также как в делфи. bankuss пишет: quote: | дуп да, надо поправить. хотя у меня и с lld вроде без ошибок выводит |
| Нет смысла править - в этом месте всё ОК.
|
|
Profile
Reply
|
дуп
|
| |
Post №: 44
Joined: 18.03.08
Rank:
-1
|
|
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
|
|
Profile
Reply
|
WildCat
|
| VIP
|
Post №: 1151
Joined: 19.10.07
Rank:
5
|
|
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; } Именно так в Ипполите.
|
|
Profile
Reply
|
дуп
|
| |
Post №: 45
Joined: 18.03.08
Rank:
-1
|
|
Posted: 28.10.09 11:38. Post subject: Да, так не влезает. ..
Да, так не влезает. Никогда про такое не слышал и не читал. Так и не понял почему. Даже если он при таких дефайнах неявно приводит множитель к 4-байтному типу, при чем тут результат?
|
|
Profile
Reply
|
NS
|
| VIP
|
Post №: 1404
Joined: 16.09.07
Rank:
6
|
|
Posted: 28.10.09 11:50. Post subject: Результат перемножен..
Результат перемножения четырехбайтных - четырехбайтное число. потеряли точность уже в процессе умножения. Понять вроде очень просто. Чтоб в результате умножения получить 64битное - нужно один из множителей привести к 64битному виду. Ты в своем примере умножаешь 64битное, поэтому у тебя всё ОК. А GetTickCount -32 битное.
|
|
Profile
Reply
|
WildCat
|
| VIP
|
Post №: 1152
Joined: 19.10.07
Rank:
5
|
|
Posted: 28.10.09 11:53. Post subject: Результат умножения ..
Результат умножения двух 32-битных чисел сперва записывается в 32-битный регистр, а уж затем значение из этого регистра записывается в 64-битную переменную. Естественно старшие разряды теряются.
|
|
Profile
Reply
|
дуп
|
| |
Post №: 46
Joined: 18.03.08
Rank:
-1
|
|
Posted: 28.10.09 12:13. Post subject: NS пишет: А вторая ..
NS пишет: quote: | А вторая причина зависаний - это останавливаются часы. Надо смотреть где с разрядностью переменных накосячено. uint64 x; x = GetTickCount() * 1000; В этом коде переполнение наверно действительно получается. |
| Вот где недоразумение. Вы то говорите глядя как в коде, а я только на пост NS. А у него здесть x uint64
|
|
Profile
Reply
|
Replys - 251
, page:
1
2
3
4
5
6
7
8
9
10
11
12
13
All
[new only]
|
|