@ProCxx

Страница 2333 из 2477
Alexander
07.09.2018
10:54:15
если тебе именно как кодец выглядит не нравится

Евгений
07.09.2018
10:54:45
напиши функцию в которой будешь делать логирование и вызывай ее?
логирование разношерстное, мне перегрузки для всех объектов писать?

Alexander
07.09.2018
10:56:09
А почему бы и да?

Евгений
07.09.2018
10:58:54
А почему бы и да?
LOG_ADD_IF( detailedLog ) << L"Найдено " << contragents.Size() << L" закрепленных контрагентов"; вот как все такие кейсы учесть?

Google
Matthew
07.09.2018
11:18:15
Всем привет! Нетиповый, может быть, вопрос для этого чата, но что есть. Делаю "бенчмарк" (просто много однотипных операций с разными типами, условия лабки, чего поделать) в C++. Компилирую g++ с -O1. Гоняю под Linux 64 bit. В моменте с действиями над float и double есть "просто деление на i", "просто умножение на i" и "деление, а потом умножение на i". Соответственно, в первом варианте получается inf (по идее) в результате, во втором 0, а в третьем начальное число. Теперь проблема: в случае компиляции с m64 всё более-менее предсказуемо ("деление + умножение" ~~ "просто деление" + "просто умножение" по времени, ну чуть дольше). В варианте же с m32 получаю внезапно катастрофу в случае умножения (т.е. там где будет inf). Добавляю скрины вывода: UPD скрины не могу, сейчас вставлю текст

https://1drv.ms/f/s!Ai564hcpa7h8iKxl3laMzhs8wI7A4A - там скрины

Кто-то знает, почему такой резкий просад? Может ли быть косяк в реализации действий с inf при запуске 32-битного приложения под 64-битной системой?

Antony
07.09.2018
11:25:26
Компилятор не будет оптимизировать "деление, а потом умножение на i" в "начальное число" без -ffast-math И лучше бенчмаркать на -O2

Вот тут можно смотреть, во что компилятор превращает код: https://godbolt.org/ (идеальная штука, для отчётов по лабам )

Matthew
07.09.2018
11:27:17
Компилятор не будет оптимизировать "деление, а потом умножение на i" в "начальное число" без -ffast-math И лучше бенчмаркать на -O2
В том-то и дело, что мне не нужно "оптимизировать". Мне нужно именно продуктивность выполнения операций мерять. И как раз-таки мне не нужно, чтоб он убирал "деление и умножение" (не уверен, что он имеет на это право в случае дробных чисел, но ладно). Мне интересно, почему такая проблема при игре с inf

Antony
07.09.2018
11:27:48
Можете код скинуть, а то я текстовое описание плохо понимаю :(

Matthew
07.09.2018
11:30:10
Можете код скинуть, а то я текстовое описание плохо понимаю :(
https://pastebin.com/uXnpUWuS - извиняюсь за код до мейна (да и за весь код, наверное), сам мейн с 56-ой строчки

Antony
07.09.2018
11:45:31
https://pastebin.com/uXnpUWuS - извиняюсь за код до мейна (да и за весь код, наверное), сам мейн с 56-ой строчки
Вот тут что-то показывается https://godbolt.org/z/sqBsMs На 32х битах трогается память, на 64х - всё в регистрах + в зависимости от железа, инструкции fild и fmul быдыт выполняться медленнее чем их аналоги на 64 битах

Pavel
07.09.2018
12:07:14
Есть вопрос, существует ли механизм отмотки стека, на подобии того что используется в setjmp (возможно что-то подобное используется в бустовых корутинах)?

Даня
07.09.2018
12:07:36
Ребят, привет.

Google
Antony
07.09.2018
12:09:35
Есть вопрос, существует ли механизм отмотки стека, на подобии того что используется в setjmp (возможно что-то подобное используется в бустовых корутинах)?
Есть несколько разной степени переносимости. Самое портабельное - это то что используется в бустовых корутинах. А именно - кинуть исключение.

Ilia
07.09.2018
12:11:10
А чем не нравится?

Pavel
07.09.2018
12:14:42
А чем не нравится?
Андройд с ними при Оz корупитит стек

Antony
07.09.2018
12:16:01
О_О

А санитайзер не ругается на приложение?

Ilia
07.09.2018
12:22:01
Pavel
07.09.2018
12:22:46
Что за Oz такой?
https://github.com/android-ndk/ndk/issues/573

Ilia
07.09.2018
12:23:34
А сам Oz это что?

Pavel
07.09.2018
12:23:42
оптимизация размера

Но там не только в ней проблема, в целом у андройда exception криво притянут за уши

Pavel
07.09.2018
12:24:57
> оптимизация размера > андроид

Pavel
07.09.2018
12:26:34
Ну... Ну не верю пока
по issues который скинул погуляй по связаным задачам

Ilia
07.09.2018
12:27:26
Ты просто более генерально заходишь...

nuClide
07.09.2018
13:08:57
Привет, можете подсказать причины, из-за которых последняя строчка может приводить к крашу? ATargetMissle* Missle = world->SpawnActor<ATargetMissle>(MissleToSpawn,GetActorLocation(),rotator,spawnParams); if(Missle) { Missle->Target = NearestObject; }

Евгений
07.09.2018
13:11:09
а уверены, что в случае "НЕУСПЕХА" вызова world->SpawnActor<ATargetMissle> вы возвращаете nullptr?

nuClide
07.09.2018
13:12:56
Эта строчка работает нормально и всегда создаёт объект, в краше указывает на ошибку доступа к памяти

Google
Евгений
07.09.2018
13:17:18
он может лежать там, если SpawnActor вернул мусор

nuClide
07.09.2018
13:21:00
nuClide
07.09.2018
13:50:19
Target это публичная переменная типа ссылки на объект, наследующий AActor

Igor
07.09.2018
13:53:34
AActor& Target;?

если так, то попытка ->Target = NearestObject приведёт к тому, что существующий объект, на который сейчас указывает таргет, попытается переинициализироваться значениями из NearestObject, вместо того чтобы таргет начал указывать на NearestObject

Евгений
07.09.2018
13:57:21
Есть стойкое ощущение, что в Missle мусор. внутри SpawnActor какой нибудь: Pointer *prt; .... return ptr; и на отладочке там красивый nullptr, а в релизе ад какой-нибудь

Dmitry
07.09.2018
16:22:32
Всем привет! Кто-нибудь знает почему у std::merge в компаратор сначала передаётся *iter2, а потом *iter1 ? см. возможную реализацию https://en.cppreference.com/w/cpp/algorithm/merge

Dmitry
07.09.2018
16:26:22
4465 template <class _Compare, class _InputIterator1, class _InputIterator2, class _OutputIterator> 4466 _OutputIterator 4467 __merge(_InputIterator1 __first1, _InputIterator1 __last1, 4468 _InputIterator2 __first2, _InputIterator2 __last2, _OutputIterator __result, _Compare __comp) 4469 { 4470 for (; __first1 != __last1; ++__result) 4471 { 4472 if (__first2 == __last2) 4473 return _VSTD::copy(__first1, __last1, __result); 4474 if (__comp(*__first2, *__first1)) 4475 { 4476 *__result = *__first2; 4477 ++__first2; 4478 } 4479 else 4480 { 4481 *__result = *__first1; 4482 ++__first1; 4483 } 4484 } 4485 return _VSTD::copy(__first2, __last2, __result); 4486 } 4474 строчка почему не обратный порядок аргументов

Aleksandr
07.09.2018
16:27:09
при этом на cppreference про компаратор написано: The signature of the comparison function should be equivalent to the following: bool cmp(const Type1 &a, const Type2 &b); The types Type1 and Type2 must be such that objects of types InputIt1 and InputIt2 can be dereferenced and then implicitly converted to both Type1 and Type2

Aleksandr
07.09.2018
16:28:55
ну сделали бы !comp(...)

вопрос в том, почему на cppreference сигнатура одна, а на деле ожидается другая

Евгений
07.09.2018
16:29:43
Aleksandr
07.09.2018
16:31:13
ну, !(меньше) это тоже самое что (больше или равно)

Евгений
07.09.2018
16:31:32
А, туплю

Так на такт менее эффективно)

Google
Sergey
07.09.2018
16:34:21
Нет, так нарушается порядок For equivalent elements in the original two ranges, the elements from the first range (preserving their original order) precede the elements from the second range (preserving their original order).

Aleksandr
07.09.2018
16:37:25
вот, цитата с cppreference: the signature of the comparison function should be equivalent to the following: bool cmp(const Type1 &a, const Type2 &b); The types Type1 and Type2 must be such that objects of types InputIt1 and InputIt2 can be dereferenced and then implicitly converted to both Type1 and Type2. ​

первым идёт тип InputIt1, вторым InputIt2

Страница 2333 из 2477