Posted: 28.10.09 10:13. Post subject: А может всё-таки рез..
А может всё-таки результат умножения будет int32? Не знаю соглашений в этом языке, а в делфи резльтат будет 100% int32, а потом уже будет преобразовываться в int64.
Posted: 28.10.09 10:26. Post subject: NS А может всё-таки ..
NS
quote:
А может всё-таки результат умножения будет int32? Не знаю соглашений в этом языке, а в делфи резльтат будет 100% int32, а потом уже будет преобразовываться в int64.
Результат умножения будет 32-битный, и будет переполнятся 20 раз в сутки.
Достаточно один из операндов преобразовать в 64 бита.
Posted: 28.10.09 10:41. Post subject: Знаю. Это я издеваюс..
Знаю. Это я издеваюсь так. Я же выше написал что глюк в этом месте. Точнее - не проверял, но был практически уверен что приведение типов работает также как в делфи. bankuss пишет:
quote:
дуп да, надо поправить. хотя у меня и с lld вроде без ошибок выводит
Posted: 28.10.09 11:38. Post subject: Да, так не влезает. ..
Да, так не влезает. Никогда про такое не слышал и не читал. Так и не понял почему. Даже если он при таких дефайнах неявно приводит множитель к 4-байтному типу, при чем тут результат?
Posted: 28.10.09 11:50. Post subject: Результат перемножен..
Результат перемножения четырехбайтных - четырехбайтное число. потеряли точность уже в процессе умножения. Понять вроде очень просто. Чтоб в результате умножения получить 64битное - нужно один из множителей привести к 64битному виду. Ты в своем примере умножаешь 64битное, поэтому у тебя всё ОК. А GetTickCount -32 битное.
Posted: 28.10.09 11:53. Post subject: Результат умножения ..
Результат умножения двух 32-битных чисел сперва записывается в 32-битный регистр, а уж затем значение из этого регистра записывается в 64-битную переменную. Естественно старшие разряды теряются.
Posted: 28.10.09 12:13. Post subject: NS пишет: А вторая ..
NS пишет:
quote:
А вторая причина зависаний - это останавливаются часы. Надо смотреть где с разрядностью переменных накосячено. uint64 x; x = GetTickCount() * 1000; В этом коде переполнение наверно действительно получается.
Вот где недоразумение. Вы то говорите глядя как в коде, а я только на пост NS. А у него здесть x uint64