int64 vs double на 32-битной платформе
От: Alexzy Россия  
Дата: 21.03.07 14:33
Оценка:
Для обработки статистических данных требуется производить операции (в очень длинных циклах) сложения и сравнения над большими неотрицательными целыми числами, возникает вопрос — как лучше с этими числами работать (с точки зрения повышения производительности) как _int64 или double? Компилятор VC-6, платформа — x86 WinXP.
Re: int64 vs double на 32-битной платформе
От: Roman Odaisky Украина  
Дата: 21.03.07 15:03
Оценка:
Здравствуйте, Alexzy, Вы писали:

A>Для обработки статистических данных требуется производить операции (в очень длинных циклах) сложения и сравнения над большими неотрицательными целыми числами, возникает вопрос — как лучше с этими числами работать (с точки зрения повышения производительности) как _int64 или double? Компилятор VC-6, платформа — x86 WinXP.


1. Выкиньте компилятор
2. Premature optimization is the root of all evil
3. Intel любят double, AMD любят int (могу, впрочем, и ошибаться)
4. Что-то мешает сделать typedef и потом устроить бенчмарк?
До последнего не верил в пирамиду Лебедева.
Re: int64 vs double на 32-битной платформе
От: Erop Россия  
Дата: 21.03.07 15:21
Оценка: +1
Здравствуйте, Alexzy, Вы писали:

A>Для обработки статистических данных требуется производить операции (в очень длинных циклах) сложения и сравнения над большими неотрицательными целыми числами, возникает вопрос — как лучше с этими числами работать (с точки зрения повышения производительности) как _int64 или double? Компилятор VC-6, платформа — x86 WinXP.


А в чём чила даны изначально?

Вообще-то, насколько я понимаю, double на современных процах лучше. Но возможны варианты.
В любом случае можешь ли ты оценить вероятность переполнения?
В конце-концов double нельзя сравнивать, а __int64 нельяз переполнять. Что важнее?

ИМХО лучше всего правильно складывать. (например иерархически)

Но я бы сделал слой функций, которые собственно вычисляют всю статистику, и реализовал их и так и сяк и по другому.
После чего померял бы что быстрее работает...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: int64 vs double на 32-битной платформе
От: Nose Россия  
Дата: 21.03.07 15:21
Оценка: +1
Здравствуйте, Alexzy, Вы писали:

A>Для обработки статистических данных требуется производить операции (в очень длинных циклах) сложения и сравнения над большими неотрицательными целыми числами, возникает вопрос — как лучше с этими числами работать (с точки зрения повышения производительности) как _int64 или double? Компилятор VC-6, платформа — x86 WinXP.


Целые? положительные? значит int64. А если есть, то unsigned int64.
Только за переполнением следи.
Re[2]: int64 vs double на 32-битной платформе
От: VEAPUK  
Дата: 21.03.07 22:07
Оценка:
Здравствуйте, Nose, Вы писали:

N>Целые? положительные? значит int64. А если есть, то unsigned int64.

N>Только за переполнением следи.

Как на С++
adc op1,1

(и иже с ними) провернуть без проверок?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: int64 vs double на 32-битной платформе
От: SWW Россия  
Дата: 22.03.07 06:17
Оценка: +1 -2
Здравствуйте, Erop, Вы писали:

E>В конце-концов double нельзя сравнивать,


Что за глупости?
Re[3]: int64 vs double на 32-битной платформе
От: Erop Россия  
Дата: 22.03.07 06:48
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Здравствуйте, Erop, Вы писали:


E>>В конце-концов double нельзя сравнивать,


SWW>Что за глупости?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: int64 vs double на 32-битной платформе
От: Erop Россия  
Дата: 22.03.07 06:51
Оценка:
Здравствуйте, SWW, Вы писали:

E>>В конце-концов double нельзя сравнивать,

SWW>Что за глупости?

double непредсказуемо ведёт себя при сравнении на равенство. Соответственно, если алгоритм предполагает какие-то сравнения на равенство (скажем, если сумма этих 1000 элементов равнв сумме той 1000), то double использовать сложнее...

А что касается глупостей, то я не знаю. Ты их где-то нашёл, тебе и виднее что за глупости
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: int64 vs double на 32-битной платформе
От: SWW Россия  
Дата: 22.03.07 07:50
Оценка:
Здравствуйте, Erop, Вы писали:

E>>>В конце-концов double нельзя сравнивать,

SWW>>Что за глупости?

E>double непредсказуемо ведёт себя при сравнении на равенство.


Во-первых, было написано "нельзя сравнивать". Про сравнение на равенство ничего не не было.

E>Соответственно, если алгоритм предполагает какие-то сравнения на равенство (скажем, если сумма этих 1000 элементов равнв сумме той 1000), то double использовать сложнее...


А во-вторых, при определенных ситуациях можно сравнивать и на равенство. Не результаты подобных вычислений, разумеется, но в определенных случаях можно.
Re[5]: int64 vs double на 32-битной платформе
От: Erop Россия  
Дата: 22.03.07 07:54
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Во-первых, было написано "нельзя сравнивать". Про сравнение на равенство ничего не не было.

SWW>А во-вторых, при определенных ситуациях можно сравнивать и на равенство. Не результаты подобных вычислений, разумеется, но в определенных случаях можно.

Ты, мил человек, русский хорошо знаешь? Я писал ответ человеку, вполне в контексте. Думаю, что там всё понятно написано. Если тебе не понятно -- то это плохо. Но может со временем отпустит.

А что касается "глупостей" из твоего сообщения, то я с его источником определился Спасибо и на этом.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: int64 vs double на 32-битной платформе
От: SWW Россия  
Дата: 22.03.07 08:05
Оценка:
Здравствуйте, Erop, Вы писали:

SWW>>Во-первых, было написано "нельзя сравнивать". Про сравнение на равенство ничего не не было.


E>Ты, мил человек, русский хорошо знаешь? Я писал ответ человеку, вполне в контексте. Думаю, что там всё понятно написано.

Для обработки статистических данных требуется производить операции (в очень длинных циклах) сложения и сравнения над большими неотрицательными целыми числами


В конце-концов double нельзя сравнивать,


Человек пишет что требуется сравнение. Ты утверждаешь, что double сравнивать нельзя. В этом контексте могу заявить только одно: ты не прав, так как сравнивать их можно. А то, что требуется сравнение на равенство нигде не написано. Не говоря уже о том, что в определенных ситуациях можно сравнивать и на равенство.
Re[7]: пример задачи (для тех кто в танке)
От: Erop Россия  
Дата: 22.03.07 08:14
Оценка:
Здравствуйте, SWW, Вы писали:
SWW>Человек пишет что требуется сравнение. Ты утверждаешь, что double сравнивать нельзя. В этом контексте могу заявить только одно: ты не прав, так как сравнивать их можно. А то, что требуется сравнение на равенство нигде не написано. Не говоря уже о том, что в определенных ситуациях можно сравнивать и на равенство.


вообще говоря у целых чисел, сравнение на больше подразумевает исравнение на неравенство.
То есть если ты знаешь, что одно целое меньше другого, то ты знаешь, что они не равны. А если ты сравниваешь даблы, и выяснил что олин меньше другого, то ты знаешь, что не знаешь равны ли они (так как равенство надо проверять хитро, с относительной погрешностью или ещё как )

Короче разные алгоритмы.

Чтобы ты наконец понял о чём биш то я, я тебе приведу задачу.

Дан большой (скажем 1е9) массив целых чисел (пусть знаковых)
Нужно найти идущий подряд подмассив этого массива с максимальной суммой элементов.
При этом из всех подмассивов с одиниковой суммой выбрать тот, у которого самая маленькая левая граница.
А из всех подмассивов с совпадающей левой границей надо выбрать тот, у которого правая граница расположена левее всего.

приведи решение с даблами и с длинными целыми, пжлст
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: int64 vs double на 32-битной платформе
От: Сергей Мухин Россия  
Дата: 22.03.07 08:45
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, SWW, Вы писали:


E>>>В конце-концов double нельзя сравнивать,

SWW>>Что за глупости?

E>double непредсказуемо ведёт себя при сравнении на равенство. Соответственно, если алгоритм предполагает какие-то сравнения на равенство (скажем, если сумма этих 1000 элементов равнв сумме той 1000), то double использовать сложнее...


абсолютно предсказуемо, процессор не датчик случайных чисел!
т.е. если есть два 8битных плавающих, то результат сравнения предсказуем.

E>А что касается глупостей, то я не знаю. Ты их где-то нашёл, тебе и виднее что за глупости


я согласен с SWW
---
С уважением,
Сергей Мухин
Re[8]: пример задачи (для тех кто в танке)
От: SWW Россия  
Дата: 22.03.07 08:55
Оценка: +1 :)
Здравствуйте, Erop, Вы писали:

E>вообще говоря у целых чисел, сравнение на больше подразумевает исравнение на неравенство.

E>То есть если ты знаешь, что одно целое меньше другого, то ты знаешь, что они не равны. А если ты сравниваешь даблы, и выяснил что один меньше другого, то ты не знаешь равны ли они

Если я выяснил, что один меньше другого, то я могу однозначно утверждать, что они не равны.
Вот если я выяснил, что один не меньше другого — то да, он может быть больше или равен.

E>(так как равенство надо проверять хитро, с относительной погрешностью или ещё как )


Зависит от природы задачи. Вообще, мне как-то не встречались задачи, в которых double приходилось бы сравнивать на равенство. Ведь когда в вычислениях используются double, то ими кодируются какие-то "аналоговые" величины, а их сравнивать на равенство бессмысленно. Если и приходится сравнивать с относительной погрешностью, то по причине "аналоговости" этой величины, а не потому что double нельзя сравнивать на равенство. Но ведь могут быть особые, "искусственные", случаи — например функция возвращает результат вычислений или 0 когда вычисления по какой-то причине провести не удалось (разумеется если 0 не может быть результатом). То есть, одно из значений просто используется в качестве флага. В таком случае можно совершенно безопасно написать return 0; и проверять if(f() == 0).

E>Чтобы ты наконец понял о чём биш то я, я тебе приведу задачу.

E>Дан большой (скажем 1е9) массив целых чисел (пусть знаковых)
E>Нужно найти идущий подряд подмассив этого массива с максимальной суммой элементов.
E>При этом из всех подмассивов с одиниковой суммой выбрать тот, у которого самая маленькая левая граница.
E>А из всех подмассивов с совпадающей левой границей надо выбрать тот, у которого правая граница расположена левее всего.
E>приведи решение с даблами и с длинными целыми, пжлст

Поскольку задача искусственная, то и подходить к ее решению можно формально
if(s1 > s2) то выбираем s1 так как он больше.
else if(s1 == s2) то сравниваем их левые границы.
Но в реальной задаче скорее всего сравнивать на равенство будет бессмысленно так как точное равенство будет встречатьс крайне редко, а заказчика вероятно устроило бы и равенство с погрешностью, а ты его мне не задал.
Re[5]: int64 vs double на 32-битной платформе
От: Programador  
Дата: 22.03.07 09:02
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>абсолютно предсказуемо, процессор не датчик случайных чисел!

СМ>т.е. если есть два 8битных плавающих, то результат сравнения предсказуем.

Если даны флаги процессора, опции типа /Op Improves floating-point consistency то результат предсказуем. Точнее говоря можно, но очень осторожно. Переполнение не возникает, но потеря точности наступит раньше.


Дорого стоит преобразование из унсигнед в флоат. Также дорого флоат — целое, если без опции QIfist Suppresses the call of the helper function _ftol when a conversion from a floating-point type to an integral type is required Вроде SSE2 тоже можно задействовать, но не знаю
Re[9]: пример задачи (для тех кто в танке)
От: Programador  
Дата: 22.03.07 09:13
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Поскольку задача искусственная, то и подходить к ее решению можно формально

Вот например геометрия разная очень веселая бывает. Лежит ли например точка на прямой ? или просто мышкой чуть-чуть рядом ткнули.
Re[10]: пример задачи (для тех кто в танке)
От: SWW Россия  
Дата: 22.03.07 09:28
Оценка: :)
Здравствуйте, Programador, Вы писали:

SWW>>Поскольку задача искусственная, то и подходить к ее решению можно формально

P>Вот например геометрия разная очень веселая бывает. Лежит ли например точка на прямой ? или просто мышкой чуть-чуть рядом ткнули.

Казалось бы, при чем тут double? Все пикселы имеют целочисленные координаты.

У меня была программа, которая рисовала некие графики, и при наведении курсора на график выводился тултип со значением графика в этой точке. Там приходилось задавать погрешность, с какой нужно было попасть на график. Но вычисления там были целочисленными!
Re[11]: пример задачи (для тех кто в танке)
От: Programador  
Дата: 22.03.07 09:43
Оценка:
Здравствуйте, SWW, Вы писали:

Попал — не попал это простой случай. А как Вам операция обьединения полигонов?
Re[11]: пример задачи (для тех кто в танке)
От: Zigmar Израиль  
Дата: 22.03.07 10:13
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Здравствуйте, Programador, Вы писали:


SWW>>>Поскольку задача искусственная, то и подходить к ее решению можно формально

P>>Вот например геометрия разная очень веселая бывает. Лежит ли например точка на прямой ? или просто мышкой чуть-чуть рядом ткнули.

SWW>Казалось бы, при чем тут double? Все пикселы имеют целочисленные координаты.

Пиксили-то целочисленные, а все вычесления, в компьютерной графике — в double, и только в самом конце округляются при выводе на девайс. Ради эксперимента, попробуй потрансформировать какую-нибудь векторную фигуру используя целочисленные матрицы

SWW>У меня была программа, которая рисовала некие графики, и при наведении курсора на график выводился тултип со значением графика в этой точке. Там приходилось задавать погрешность, с какой нужно было попасть на график. Но вычисления там были целочисленными!

Это только для самых простейших вариантов подходит. Ты такому графику даже зум не сможешь сделать, ну разве что кратный двум.
"To protect people you must slay people. To let people live you must let people die. This is the true teaching of the sword."
-Seijuro Hiko, "Rurouni Kensin"
Re[12]: пример задачи (для тех кто в танке)
От: minorlogic Украина  
Дата: 22.03.07 10:42
Оценка:
Здравствуйте, Programador, Вы писали:

P>Здравствуйте, SWW, Вы писали:


P>Попал — не попал это простой случай. А как Вам операция обьединения полигонов?


Только хотел про GPC вспомнить и совершенно замечательные решения. Кстати есть там и куски которые на равенство плавающие числа сравнивают ,о конечно иони полученны из одного источника.
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[4]: int64 vs double на 32-битной платформе
От: icWasya  
Дата: 22.03.07 12:53
Оценка:
Здравствуйте, Вы писали:

>В конце-концов double нельзя сравнивать,

>double непредсказуемо ведёт себя при сравнении на равенство.

А сдаётся мне, что если на входе целые числа, исходные данные
и промежуточные результаты не более 2^52,
то все вычисления на Double будут производиться точно.

А если взять Extended, то можно поднять верхнюю планку точности до 2^63.
Re[5]: int64 vs double на 32-битной платформе
От: Programador  
Дата: 22.03.07 13:07
Оценка:
Здравствуйте, icWasya, Вы писали:

W>А если взять Extended, то можно поднять верхнюю планку точности до 2^63.

нет такого типа на этом компилере The representation of long double and double is identical. However, long double and double are separate types.
Re[6]: int64 vs double на 32-битной платформе
От: Сергей Мухин Россия  
Дата: 22.03.07 14:43
Оценка:
Здравствуйте, Programador, Вы писали:

W>>А если взять Extended, то можно поднять верхнюю планку точности до 2^63.

P>нет такого типа на этом компилере The representation of long double and double is identical. However, long double and double are separate types.

если Вы посмотрите, то форум С/C++, и не надо о ограничениях конкретного компилятора.

ps
в русском языке нет слова "компилер", "компилиться" и тп
---
С уважением,
Сергей Мухин
Re[7]: int64 vs double на 32-битной платформе
От: Programador  
Дата: 22.03.07 14:48
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>если Вы посмотрите, то форум С/C++, и не надо о ограничениях конкретного компилятора.


Исходный пост про VC6. Но если гуи у автора нет, то перенести не долго
Re[7]: int64 vs double на 32-битной платформе
От: SWW Россия  
Дата: 22.03.07 14:52
Оценка: +1 :)
Здравствуйте, Сергей Мухин, Вы писали:

W>>>А если взять Extended, то можно поднять верхнюю планку точности до 2^63.

P>>нет такого типа на этом компилере The representation of long double and double is identical. However, long double and double are separate types.

СМ>если Вы посмотрите, то форум С/C++, и не надо о ограничениях конкретного компилятора.


Если так рассуждать, то придется признать что и double может быть не только IEEE 754...
Re[8]: int64 vs double на 32-битной платформе
От: Programador  
Дата: 22.03.07 16:49
Оценка:
Прикольно люди Микрософт лечат http://www.rsdn.ru/Forum/Message.aspx?mid=922025&amp;only=1
Автор: adontz
Дата: 29.11.04


__declspec(align(2)) class long_double
    {
        private:
            unsigned char data[10];
        public:
            __forceinline long_double()
                {
                    __asm FLdZ;
                    __asm Mov ECX, this;
                    __asm FStP TBYTE PTR [ECX];
                }
            __forceinline 
................................
__asm 
__asm 
__asm 
__asm 
.................................

Re[9]: Танк -- это сила :)
От: Erop Россия  
Дата: 22.03.07 17:01
Оценка:
Здравствуйте, SWW, Вы писали:


SWW>Зависит от природы задачи. Вообще, мне как-то не встречались задачи, в которых double приходилось бы сравнивать на равенство. Ведь когда в вычислениях используются double, то ими кодируются какие-то "аналоговые" величины, а их сравнивать на равенство бессмысленно. Если и приходится сравнивать с относительной погрешностью, то по причине "аналоговости" этой величины, а не потому что double нельзя сравнивать на равенство. Но ведь могут быть особые, "искусственные", случаи — например функция возвращает результат вычислений или 0 когда вычисления по какой-то причине провести не удалось (разумеется если 0 не может быть результатом). То есть, одно из значений просто используется в качестве флага. В таком случае можно совершенно безопасно написать return 0; и проверять if(f() == 0).


Не, мужчина, вы вообще не свои посты читаете?

В оригинале рассказывали что-то о вычислениях "с неотрицательными целыми".
Я всё пытаюсь обратить твоё драгоценнейшее внимание на то, что double немного не под то заточен.
Ты всё правильно пишешь, что для double интересоваться точным равенстовм странно. Но для целых-то не странно, а наоборт естественно
Так что если ты для реализации операций над целыми, которые надо ещё и сравнивать, заюзаешь double возможны трудности.
Они конечно не непреодилимые, но на борьбу с ними потребуется тратить производительность...


E>>Чтобы ты наконец понял о чём биш то я, я тебе приведу задачу.

Видимо не помогло. Попробуй ещё раз. Ключевое слов я выделил!

E>>Дан большой (скажем 1е9) массив целых чисел (пусть знаковых)

E>>Нужно найти идущий подряд подмассив этого массива с максимальной суммой элементов.
E>>При этом из всех подмассивов с одиниковой суммой выбрать тот, у которого самая маленькая левая граница.
E>>А из всех подмассивов с совпадающей левой границей надо выбрать тот, у которого правая граница расположена левее всего.
E>>приведи решение с даблами и с длинными целыми, пжлст

SWW>Поскольку задача искусственная, то и подходить к ее решению можно формально

SWW>if(s1 > s2) то выбираем s1 так как он больше.
SWW>else if(s1 == s2) то сравниваем их левые границы.
Ты прости, но я не понял что ты тут написал. Кто такие s1 и s2? Какого они типа? Почему тебе кажется, что задача искуственная?
Положим, что массив -- это доход от каких-то финансовых инструментов. И мы ищем период, когда был самый большой абсолютный рост...

SWW>Но в реальной задаче скорее всего сравнивать на равенство будет бессмысленно так как точное равенство будет встречатьс крайне редко, а заказчика вероятно устроило бы и равенство с погрешностью, а ты его мне не задал.


интересно бы узнать откуда это следует? Числа-то целые. Пусть даже ограниченные по модулю числом 10 000 000.

В общем я человек простой, с русским у меня непросто всё.
Не могёшь на С++ написать ответ?

пусть у тебя есть мегафункция
int getNextValue()

Которая возвращает последовательность целых чисел. И надо указать порядковые номера границ искомого подмассива.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: пример задачи (для тех кто в танке)
От: Erop Россия  
Дата: 22.03.07 17:06
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>>>Поскольку задача искусственная, то и подходить к ее решению можно формально

P>>Вот например геометрия разная очень веселая бывает. Лежит ли например точка на прямой ? или просто мышкой чуть-чуть рядом ткнули.

SWW>Казалось бы, при чем тут double? Все пикселы имеют целочисленные координаты.


казалось бы...
Тут вроде и обсуждают что будет, если целочисленные вычисления по каким-то соображениям делать через double...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: задачка для углублённого понимания :)
От: Erop Россия  
Дата: 22.03.07 17:11
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>абсолютно предсказуемо, процессор не датчик случайных чисел!

СМ>т.е. если есть два 8битных плавающих, то результат сравнения предсказуем.
E>>А что касается глупостей, то я не знаю. Ты их где-то нашёл, тебе и виднее что за глупости
СМ>я согласен с SWW

И тебе, мил человек, задача:

Дан большой (скажем 1е9) массив знаковых целых чисел
Нужно найти идущий подряд подмассив этого массива с максимальной суммой элементов.
При этом из всех подмассивов с одиниковой суммой выбрать тот, у которого самая маленькая левая граница.
А из всех подмассивов с совпадающей левой границей надо выбрать тот, у которого правая граница расположена левее всего.
массив задан при помощи функции.
int getNext()
первый вызов возвращает 1-й элемент массива, второй -- 2-й и т. д..

ОТвет желательно на C++
через __int64 и через double.
Потом смотрим и сравниваем что увидили....
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: int64 vs double на 32-битной платформе
От: Erop Россия  
Дата: 22.03.07 17:13
Оценка:
Здравствуйте, icWasya, Вы писали:

W>А сдаётся мне, что если на входе целые числа, исходные данные

W>и промежуточные результаты не более 2^52,
W>то все вычисления на Double будут производиться точно.

W>А если взять Extended, то можно поднять верхнюю планку точности до 2^63.


В целом никто не обещал, хотя скорее всего так и будет конечно, но вдруг значение всегда нормализуют?
Кроме того, если просто вязть и использовать __int64 (о котором и спросили, собственно), то сразу бужем иметь границу в 2^63 или даже 2^64 вообще без извратов совместимо и гарантированно
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: задачка для углублённого понимания :)
От: Сергей Мухин Россия  
Дата: 22.03.07 20:48
Оценка:
Здравствуйте, Erop, Вы писали:

E>И тебе, мил человек, задача:


мне трудно понять, человек, который путает int & size_t, который говорит, что double не сравниваются, мне будет задачки давать? Бред
---
С уважением,
Сергей Мухин
Re[7]: задачка для углублённого понимания :)
От: Erop Россия  
Дата: 23.03.07 09:53
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>мне трудно понять, человек, который путает int & size_t, который говорит, что double не сравниваются, мне будет задачки давать? Бред


Выделенное -- это конечно печально. Но попробуй сконцентрироваться
И если ты уже постучал по столу всем чем хотел и крепость ствола демонстрировать закончил, то попробуй не переходить на личности, а пояснить можно или нельзя сравнивать double в рамках предложеной задачи (она как раз такая, как в стартовом сообщении темы. ПРо большое число целых чисел, которые надо складывать и сравнивать)

Потому что я не знаю как объяснить понятнее

И. Т. Егор.
p. s.
А как ты узнал, что я "путаю" size_t и int? Их очень просто отличить, например по позиции буквы "i" в названии типа
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: пример задачи (для тех кто в танке)
От: Кодт Россия  
Дата: 23.03.07 13:28
Оценка:
Здравствуйте, Erop, Вы писали:

E>Дан большой (скажем 1е9) массив целых чисел (пусть знаковых)


Не пусть, а именно знаковых. Иначе ответ будет — [0;1e9)

E>Нужно найти идущий подряд подмассив этого массива с максимальной суммой элементов.


E>При этом из всех подмассивов с одиниковой суммой выбрать тот, у которого самая маленькая левая граница.

E>А из всех подмассивов с совпадающей левой границей надо выбрать тот, у которого правая граница расположена левее всего.

Проще сказать, выбрать крайне левый (или первый попавшийся, если алгоритм потоковый).

E>приведи решение с даблами и с длинными целыми, пжлст


Спасибо за этюд, в таком ракурсе я над этой задачей не сталкивался...
То есть, наша задача — не просто найти такой массив, но ещё и побороться с переполнениями и округлениями.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[2]: int64 vs double на 32-битной платформе
От: Аноним  
Дата: 23.03.07 13:57
Оценка:
Здравствуйте, Erop, Вы писали:

E>Вообще-то, насколько я понимаю, double на современных процах лучше. Но возможны варианты.

E>В любом случае можешь ли ты оценить вероятность переполнения?
E>В конце-концов double нельзя сравнивать, а __int64 нельяз переполнять. Что важнее?

Я что-то пропустил в мире ИТ? С каких это пор числа с плавающей точкой обрабатываются быстрее целочисленной арифметики?
Re[3]: int64 vs double на 32-битной платформе
От: Programador  
Дата: 23.03.07 14:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я что-то пропустил в мире ИТ? С каких это пор числа с плавающей точкой обрабатываются быстрее целочисленной арифметики?

Тема про 32-х разрядную платформу. Вполне возможно изза памяти — шина шире и регистров для пар по 32 может не хватать, прийдется промежуточные в памяти заводить.
Re: int64 vs double на 32-битной платформе
От: VEAPUK  
Дата: 23.03.07 15:16
Оценка:
Здравствуйте, Alexzy, Вы писали:

A>Для обработки статистических данных требуется производить операции (в очень длинных циклах) сложения и сравнения над большими неотрицательными целыми числами, возникает вопрос — как лучше с этими числами работать (с точки зрения повышения производительности) как _int64 или double? Компилятор VC-6, платформа — x86 WinXP.


А как реализован _int64 в VC-6, вот если через MMX (нам же флоаты не нужны), то вопросом просто и быть не должно, если нет — сделайте сами...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: пример задачи (для тех кто в танке)
От: Erop Россия  
Дата: 23.03.07 22:36
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Спасибо за этюд, в таком ракурсе я над этой задачей не сталкивался...

К>То есть, наша задача — не просто найти такой массив, но ещё и побороться с переполнениями и округлениями.

Точно так.
Правда этюд так себе.
Так как 1е9 мало, чтобы переполнить int64 складывая int32
А вот с double уже веселее всё будет
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: int64 vs double на 32-битной платформе
От: gear nuke  
Дата: 25.03.07 15:32
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Я что-то пропустил в мире ИТ? С каких это пор числа с плавающей точкой обрабатываются быстрее целочисленной арифметики?


С тех пор, как 32х битные процессоры научились умножать и делить 64 битные целые.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: int64 vs double на 32-битной платформе
От: gear nuke  
Дата: 25.03.07 16:20
Оценка: :)
Здравствуйте, VEAPUK, Вы писали:

VEA>Как на С++

VEA>
VEA>adc op1,1 
VEA>

VEA>(и иже с ними) провернуть без проверок?

Использовать компилятор с поддержкой 64 битных целых.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: int64 vs double на 32-битной платформе
От: VEAPUK  
Дата: 25.03.07 18:47
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, VEAPUK, Вы писали:


VEA>>Как на С++

VEA>>
VEA>>adc op1,1 
VEA>>

VEA>>(и иже с ними) провернуть без проверок?

GN>Использовать компилятор с поддержкой 64 битных целых.


Ну это я написал неправильно прочтя исходный пост (думал о очень длинных целых (много много слов), а не о длинных циклах).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: int64 vs double на 32-битной платформе
От: Аноним  
Дата: 26.03.07 08:32
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, <Аноним>, Вы писали:


А>>Я что-то пропустил в мире ИТ? С каких это пор числа с плавающей точкой обрабатываются быстрее целочисленной арифметики?


GN>С тех пор, как 32х битные процессоры научились умножать и делить 64 битные целые.


спасибо за информацию. Никогда бы не подумал. Зашел на сайт Intel на котором приведены результаты тестов для 64-битной архитектуры. Действительно floating-point equation быстрее чем integer
Re[5]: int64 vs double на 32-битной платформе
От: gear nuke  
Дата: 26.03.07 10:26
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Зашел на сайт Intel на котором приведены результаты тестов для 64-битной архитектуры.


Я не имел ввиду 64 бита, там не всё так однозначно, например, A64 только делит медленнее (сложение и вычитание понятно что будет быстрее для целых). А вот 32х битным процам приходится выполнять далеко не одну инструкцию, что бы перемножить 64 бита, в отличае от FPU.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: int64 vs double на 32-битной платформе
От: Programador  
Дата: 26.03.07 12:04
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, <Аноним>, Вы писали:


А>>Зашел на сайт Intel на котором приведены результаты тестов для 64-битной архитектуры.


GN>Я не имел ввиду 64 бита, там не всё так однозначно, например, A64 только делит медленнее

Деление еще и остаток вычисляет, а потом забить могли на деление — транзисторы сэкономить в ущерб какому нибудь паралелизму
Re[7]: int64 vs double на 32-битной платформе
От: VEAPUK  
Дата: 26.03.07 19:59
Оценка:
Здравствуйте, Programador, Вы писали:

P>Здравствуйте, gear nuke, Вы писали:


GN>>Здравствуйте, <Аноним>, Вы писали:


А>>>Зашел на сайт Intel на котором приведены результаты тестов для 64-битной архитектуры.


GN>>Я не имел ввиду 64 бита, там не всё так однозначно, например, A64 только делит медленнее

P>Деление еще и остаток вычисляет, а потом забить могли на деление — транзисторы сэкономить в ущерб какому нибудь паралелизму
Разве не забито на деление в CPU? Т.е. всё деление (и целочисленное) в FPU?
Может и бред...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.