Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
суть задачи есть необходимость написать библиотечные inline- функции (имеется в виду статическая библиотека). т.е. код для инлайнинга должен лежать в .lib, это важно, не в .h вариант делать как обычно - дефиницию помещать в .h не подходит, т.к. функции тянут за собой довольно тяжелые внешние зависимости, которые в целевом проекте не нужны (чтоб не портить ctags/intellisense и прочий автокомплит). ну и не разрешать девелоперу просто так юзать третьесторонние фичи без спросу. в visual c++ удалось подобное запинать через __inline __forceinline и обязательный /GL с /LTCG (кроссмодульно инлайнит только на линковке, иначе никак инлайниться не пожелало). в GСC же получился какой-то явный brainfuck с __attribute__ ((gnu_inline)), возврат к GNU89 семантике как-то показался сильно подозрительным. в Solaris Studio аналогично - свои чудные бубенцы с флагами обратной совместимости. до других компиляторов руки еще не дошли. собственно вопрос - у кого-то есть пример как надо правильно и кроссплатформенно делать сабж? пример библиотек? компиляторы - последних-предпоследних версий. усиленный гуглеж в течение суток убедительных примеров не дал. и желательно еще и случай .dll/.so, хотя последние не обязательны (они используются только для ускорения линковки при разработке, там все равно debug режим, а релиз собирается целиком статическим блобом) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 23:09 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
А если попробовать LTO как описано здесь? http://stackoverflow.com/questions/5987020/can-the-linker-inline-functions ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 23:44 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА если попробовать LTO как описано здесь? http://stackoverflow.com/questions/5987020/can-the-linker-inline-functions c GCC опциями компилятора проблем нет, там проблема в том, что inline атрибут на функцию указывается немного через одно место - в соответствии c С99/C11 стандартами, с выплевыванием куч warning и прочими малопонятными не покрытыми внятной документацией приседанями. кучерявыми макросами и научным тыком все это конечно решается, но осадок сырости остался. меня больше интересовал вопрос как это в принципе нужно грамотно делать, на примере существующих решений, вроде APR, QT и подобных библиотек, в проекции на все актуальные компиляторы. изучение же кроссплатформенных библиотек результата не дало - там эта тема не раскрыта, что довольно странно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 00:46 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Так при LTCG/LTO помечать как inline вообще не нужно. Компайлер сам разберется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 01:00 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaизучение же кроссплатформенных библиотек результата не дало - там эта тема не раскрыта, что довольно странно. Ничего странного. Inline на современных процах особой роли не играет. Поэтому никто не заморачивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 01:03 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Ну и вот эта мотивация очень специфическая. nojavaвариант делать как обычно - дефиницию помещать в .h не подходит, т.к. функции тянут за собой довольно тяжелые внешние зависимости, которые в целевом проекте не нужны (чтоб не портить ctags/intellisense и прочий автокомплит). ну и не разрешать девелоперу просто так юзать третьесторонние фичи без спросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 01:07 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskynojavaизучение же кроссплатформенных библиотек результата не дало - там эта тема не раскрыта, что довольно странно. Ничего странного. Inline на современных процах особой роли не играет. Поэтому никто не заморачивается. да да, ты еще скажи, что между O0 и O3 на современных процах разницы нет. задача явного управления инлайном - это просто ограничение маневра анализатору - а то он там сам наанализирует. Anatoly MoskovskyНу и вот эта мотивация очень специфическая. Вот тут да, ты прав, там мотивация - сделать из C/C++ среду прикладного, а не системного программирования. Стандартные библиотеки и остальное на прикладные задачи совсем не тянут - попросту неадекватны, потому и должны быть гарантированно выкинуты из доступных. Такое изначально никому не нужно - мало кто отважится сделать свой "еще один Objective C" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 03:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaсуть задачи есть необходимость написать библиотечные inline- функции (имеется в виду статическая библиотека). т.е. код для инлайнинга должен лежать в .lib, это важно, не в .h inline не могут быть библиотечными. Либо inline, либо библиотечные. Т.е. в современном последнем стандарте inlinе функции должны быть определены в заголовочном файле. Примут модули -- будет по-другому, но в любом случае не в .lib они будут лежать (видимо) nojava вариант делать как обычно - дефиницию помещать в .h не подходит, т.к. функции тянут за собой довольно тяжелые внешние зависимости, которые в целевом проекте не нужны (чтоб не портить ctags/intellisense и прочий автокомплит). Это не связанные вещи. nojavaну и не разрешать девелоперу просто так юзать третьесторонние фичи без спросу. Как бы если ты хочешь использовать inline-функции, это неизбежно. nojavaсобственно вопрос - у кого-то есть пример как надо правильно и кроссплатформенно делать сабж? пример библиотек? Никак. это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 07:05 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaда да, ты еще скажи, что между O0 и O3 на современных процах разницы нет. В вашем случае нет разницы. Когда функция является оберткой над скрытой имплементацией, то инлайнь ее или нет - пофиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 08:19 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaAnatoly MoskovskyНу и вот эта мотивация очень специфическая. Вот тут да, ты прав, там мотивация - сделать из C/C++ среду прикладного, а не системного программирования. Стандартные библиотеки и остальное на прикладные задачи совсем не тянут - попросту неадекватны, потому и должны быть гарантированно выкинуты из доступных. Шутник, синтаксис у С++ тоже не совсем адекватен для прикладного проганья а нативный движок + скрипты для прикладников чем не устраивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 08:21 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Тут - целый топик про преждевременную оптимизацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 10:01 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivinline не могут быть библиотечными. Либо inline, либо библиотечные. MasterZivНикак. это невозможно. твое мнение очень ценно для нас (с) ты еще раз прочитай первые два поста - там вполне сказано, что очень даже можно, вопрос лишь стоял в том - как именно принято делать это правильно и хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 10:38 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskynojavaда да, ты еще скажи, что между O0 и O3 на современных процах разницы нет. В вашем случае нет разницы. Когда функция является оберткой над скрытой имплементацией, то инлайнь ее или нет - пофиг. вообще-то не пофиг, потому что инлайнится builtin целочисленной арифметики, с проверкой переполнения. https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html#Integer-Overflow-Builtins и аналогичные интринзики из MVCC https://msdn.microsoft.com/en-us/library/windows/desktop/ff516460(v=vs.85).aspx плюс атомарные builtin , плюс чекалки доступа памяти, плюс... которые в каждой платформе свои особо кустистые, и делать их обычными функциями - это просад по перфомансу до 50% а так да - мнение, инлайнить или нет - очень ценное мнение, выскажешь его еще раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 10:43 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)nojavaпропущено... Вот тут да, ты прав, там мотивация - сделать из C/C++ среду прикладного, а не системного программирования. Стандартные библиотеки и остальное на прикладные задачи совсем не тянут - попросту неадекватны, потому и должны быть гарантированно выкинуты из доступных. Шутник, синтаксис у С++ тоже не совсем адекватен для прикладного проганья а нативный движок + скрипты для прикладников чем не устраивает? синтаксис у С++ вполне адекватен, я не говорил обратного. неадекватны стандартные библиотеки, они не заточены под программирование к примеру тех-же бухгалтерских или веб задач, дебет кредит, база данных-HTML рендеринг. если в Oracle есть свой BCD подобный тип NUMBER, то в C++ есть только IEEE float с потерей точности, за использование которого в финансовых задачах нужно просто брать руки и зажимать их нежно в дверь. в теории GCC поддерживает decimal float, но по факту - нет. и это мы только по типам данных для денег прошлись, дальше можно и по остальным неадекватностям прогуляться - от ORM, то веб-темплейтов, будет, мягко говоря, не весело, но мне уже немного лень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 10:48 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaсобственно вопрос - у кого-то есть пример как надо правильно и кроссплатформенно делать сабж?Кроссплатформенно - никак. Это надо, чтобы компилятор генерировал не готовый машинный код, в который линкер только подставляет адреса внешних функций, а некое промежуточное представление. Что далеко не всегда имеет место быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 11:09 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojava, я крайне сомневаюсь, что у вас получится одновременно extern и inline. Более того, я уверен, что у вас так не получится, чтобы это ещё и реально работало, допустим, под gcc, clang и MS C++ compiler ... а ведь можно ещё про интел вспомнить и Сан Оракл ... Но если вдруг получится - поделИтесь секретом, ладно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 11:17 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaесли в Oracle есть свой BCD подобный тип NUMBER, то в C++ есть только IEEE float с потерей точности, за использование которого в финансовых задачах нужно просто брать руки и зажимать их нежно в дверь. std::ratio<1, 100> - чем он хуже, чем в Oracle есть свой BCD подобный тип NUMBER? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 11:38 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вася Уткинnojavaесли в Oracle есть свой BCD подобный тип NUMBER, то в C++ есть только IEEE float с потерей точности, за использование которого в финансовых задачах нужно просто брать руки и зажимать их нежно в дверь. std::ratio<1, 100> - чем он хуже, чем в Oracle есть свой BCD подобный тип NUMBER? Они ничем не хуже и не лучше. Когда вы работаете в Oracle PLSQL с типом NUMBER то вы воспроизводите NULL-семантику реляционной алгебры. Тоесть при расчете avg(..) от трех строк в таблице {0,null,6} вы не должны заменять null на 0 а учитывать его как несуществующее значение в коллекции. Тоесть среднее должно быть равно 3 а не 2. Также у вас не должно быть попытки расширять тип NUMBER больше 40 десятичных разрядов на клиенте. Тоесть не должно быть в принципе такой возможности. При сериализации-десериализации не должно быть потерь или внезапных приобретений в значениях числа. Также надо посмотреть в сторону погрешностей расчетов. Нужно 100% эмулировать BCD-арифметику иначе расчеты клиента и сервера где-то не сойдутся. Кому-то последний пункт может показаться не очень важным но это еще один способ стрельнуть себе в ногу в неожиданном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 12:04 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaвообще-то не пофиг, потому что инлайнится builtin целочисленной арифметики, с проверкой переполнения. https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html#Integer-Overflow-Builtins и аналогичные интринзики из MVCC https://msdn.microsoft.com/en-us/library/windows/desktop/ff516460(v=vs.85).aspx плюс атомарные builtin , плюс чекалки доступа памяти, плюс... которые в каждой платформе свои особо кустистые, и делать их обычными функциями - это просад по перфомансу до 50% Да вы просто неправильно язык выбрали, вам не С++ нужен, а то-то другое :) А вообще проверка переполнения дает просадку производительности, даже если она интегрирована в языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 12:09 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaа так да - мнение, инлайнить или нет - очень ценное мнение, выскажешь его еще раз? Если надо инлайнить - пишите инлайн функции в хедерах и поставляйте их с библиотекой. Это ответ на ваш вопрос как грамотно делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 12:38 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskynojavaа так да - мнение, инлайнить или нет - очень ценное мнение, выскажешь его еще раз? Если надо инлайнить - пишите инлайн функции в хедерах и поставляйте их с библиотекой. Это ответ на ваш вопрос как грамотно делать. в этом совете нет ни грамма про грамотность, там лишь про типовой общепринятый (и неадекватный в данном случае) подход. я уже говорил - мне не нужны в основном проекте открытые спецификации из IntSafe.h и подобное. я не хочу видеть эти платформо специфичные функции доступными в Autocomplete, доступными для непосредственного связывания. каждый раз парсить эти .h при компиляции и делать подобную ненужную работу тоже не хочу (и вот не надо тут говорить еще и про pch, там отдельная смешная печаль в этих ваших фактически некросплатформенных C/C++). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 12:48 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
BagaBaganojava, я крайне сомневаюсь, что у вас получится одновременно extern и inline. Более того, я уверен, что у вас так не получится, чтобы это ещё и реально работало, допустим, под gcc, clang и MS C++ compiler ... а ведь можно ещё про интел вспомнить и Сан Оракл ... Но если вдруг получится - поделИтесь секретом, ладно? это уже получилось, в gcc, mvcc, clang, sunpro. никакого секрета нет - везде используется link time optimization, ключи естественно разные, но cmake им вполне можно обучить. форсирование инлайнинга везде делается по-разному, но чудные макросы INLINE решают и эту проблему. в debug режиме (O0) это все, естественно, не работает со временем будет опубликовано на github, пока не время :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 12:56 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
любителям ректального подхода надо понимать что инлайн потом оптимизация != компиляция потом инлайн маш.кода смысла мало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 13:03 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Barlonenojavaвообще-то не пофиг, потому что инлайнится builtin целочисленной арифметики, с проверкой переполнения. https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html#Integer-Overflow-Builtins и аналогичные интринзики из MVCC https://msdn.microsoft.com/en-us/library/windows/desktop/ff516460(v=vs.85).aspx плюс атомарные builtin , плюс чекалки доступа памяти, плюс... которые в каждой платформе свои особо кустистые, и делать их обычными функциями - это просад по перфомансу до 50% Да вы просто неправильно язык выбрали, вам не С++ нужен, а то-то другое :) А вообще проверка переполнения дает просадку производительности, даже если она интегрирована в языке. другие языки еще более неадекватны - там или сборщик мусора, или фактическое отсуствие кроссплатформенности, или производительность кода никудышняя. кроме того, С/C++ по факту наиболее развиты в части оптимизации кода и поддержка в IDE одна из лучших BarloneА вообще проверка переполнения дает просадку производительности, даже если она интегрирована в языке. между интеграцией в язык и доступностью в библиотечных функциях есть очень большая разница. этож основы контрактного программирования. если у тебя в for (int i = 0; i < n; i++) проверка на переполнение встроена уже в i < n, то ясное дело, ее нет никакой нужны делать еще и в i++. но такое дармовое контрактное условие выполняется/проверяется не всегда, потому у разработчика должен быть выбор. а конктерно в контексте выше - проверка на целочисленное переполнение нужна в случае как раз библиотеки для финансовой математики - если в случае double переполнение будет решено просто потерей значимых цифр (без всякого exception), то если делать fixed point number тип для подсчета денег, то переполнение значимых цифр может привести к катастрофе (опять-же, без exception) - а это надо отлавливать и проверять. говоря проще - никто не собирается включать проверку целочисленного переполнения глобально, это глупо, да и в случае фунций хеширования и чексумм - еще и недопустимо, там алгоритмы на переполнении как раз и построены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 13:05 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonКому-то последний пункт может показаться не очень важным но это еще один способ стрельнуть себе в ногу в неожиданном месте. Неожиданное место начинается в безобидном числе 0.3, которое никак не может быть представлено через double/float даже специальный сайт есть с описанием этого... феномена http://0.30000000000000004.com/ кстати, даже в Delphi есть специальный тип Currency . Кстати, реализован именно как Fixed point number, хотя BСD там тоже есть http://docwiki.embarcadero.com/RADStudio/Seattle/en/BCD_Support_Routines Аналогичная ситуация в .NET Хотя умудренные опытом мейнфрейм деды говорят не про BCD, а про decimal floating point , который в .NET тоже есть https://msdn.microsoft.com/en-us/library/364x0z75.aspx и примерно подобный в Java http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html надо понимать, что BCD != DFP != Fixed point, это разные подходы к точному подсчету денег. А в Oracle NUMBER - это вообще base-100 тип. самый скоростной и переносимый - fixed point, ибо крутится на integer (int64/int128) а avg() это отдельная тема, и NULL во float/double вроде как принято представлять через NaN, нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 13:41 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaно такое дармовое контрактное условие выполняется/проверяется не всегда, потому у разработчика должен быть выбор. Выбор == возможность облажаться А так еще забавный момент - в С++ переполнение для signed - это неопределенное поведение (в отличие от unsigned). Причем эти грабли совершенно реальны . Так что даже проверить наличие знакового переполнения кроссплатформенно затруднительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 14:04 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaговоря проще - никто не собирается включать проверку целочисленного переполнения глобально, это глупо, да и в случае фунций хеширования и чексумм - еще и недопустимо, там алгоритмы на переполнении как раз и построены. Если очень надо - можно вставками на асме писать вычисления и проверять флаг переполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 14:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли очень надо - можно вставками на асме писать вычисления и проверять флаг переполнения. далеко не везде их можно писать, не говоря уже об осмысленности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 14:15 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Barlonenojavaно такое дармовое контрактное условие выполняется/проверяется не всегда, потому у разработчика должен быть выбор. Выбор == возможность облажаться А так еще забавный момент - в С++ переполнение для signed - это неопределенное поведение (в отличие от unsigned). Причем эти грабли совершенно реальны . Так что даже проверить наличие знакового переполнения кроссплатформенно затруднительно. затруднительно, но не невозможно - см. выше про intsafe.h и gcc builtin-ы возможность облажаться есть всегда - даже в Java с их хваленым "GC решает все проблемы" память точно так-же течет, как и везде, ну а вместо dangling pointer они отхватили свои классы системных проблем тут скорее вопрос не в том, как бы вообще не облажаться, а как-бы сделать так, чтоб облажаться было сильно затруднительно, ну и проверок понаставить везде где только можно, начиная с уровня статического анализатора. так-то в лужу можно сесть всегда вон на простейшем: http://blog.regehr.org/archives/1307, где даже -Wstrict-aliasing не помогает :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 14:16 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaзатруднительно, но не невозможно - см. выше про intsafe.h и gcc builtin-ы В ссылке про intsafe.h - только про unsigned, по крайней мере я не увидел там signed типов... Про gcc - да, там есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 14:34 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaэто уже получилось, в gcc, mvcc, clang, sunpro. никакого секрета нет - везде используется link time optimization, ключи естественно разные, но cmake им вполне можно обучить. форсирование инлайнинга везде делается по-разному, но чудные макросы INLINE решают и эту проблему. в debug режиме (O0) это все, естественно, не работает А вы уверены, что ваши __inline__ в исходнике как-то попадают объектный файл и влияют на решение линкера? Может, просто поставив ключи для link time optimization, вы получите то же самое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 14:47 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaа avg() это отдельная тема, и NULL во float/double вроде как принято представлять через NaN, нет? Нет. Арифметика с Infinity/Nan - это все части стандарта IEE 754 и других (тысячи их). Я знаю что JavaScript весьма лукавым образов вводит полиморфизм decimal-типов используя double но и имеет артефакты. Точно не уверен (не специалист в JS) но кажется только индексы массивов кастятся в целое а все остальные вычисления арифметики идут через double. Реляционная алгебра - это другое. Выше кто-то предложил юзать std::ratio<1, 100> в качестве замены NUMBER(m,n) на клиентской стороне. Я говорю - ОК я не против. Только давайте договримся как будем представлять NULL и как с ним работать. Тривиально если мы получили SELECT NULL FROM DUAL; у нас должна быть техническая возможность положить это значение в тип и работать с ним далее с сохранением семантики Oracle - вычислений. Тоесть нам нужна биекция между доменом значений NUMBER и нашим типом данных на стороне клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 14:52 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Barlonenojavaэто уже получилось, в gcc, mvcc, clang, sunpro. никакого секрета нет - везде используется link time optimization, ключи естественно разные, но cmake им вполне можно обучить. форсирование инлайнинга везде делается по-разному, но чудные макросы INLINE решают и эту проблему. в debug режиме (O0) это все, естественно, не работает А вы уверены, что ваши __inline__ в исходнике как-то попадают объектный файл и влияют на решение линкера? Может, просто поставив ключи для link time optimization, вы получите то же самое? вот в этом не уверен на все 100%, что просто включение ltp без всяких хинтов не сделает то-же самое. но зато уверен, что компилятор не возьмет и сам не примет решение не включать форсированный инлайн. как говорится - оптимист всегда верит, что будет лучше. пессимист верит что в лучшем случае не станет хуже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 15:17 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonnojavaа avg() это отдельная тема, и NULL во float/double вроде как принято представлять через NaN, нет? Нет. Арифметика с Infinity/Nan - это все части стандарта IEE 754 и других (тысячи их). Я знаю что JavaScript весьма лукавым образов вводит полиморфизм decimal-типов используя double но и имеет артефакты. Точно не уверен (не специалист в JS) но кажется только индексы массивов кастятся в целое а все остальные вычисления арифметики идут через double. да, в JavaScript вообще все числа по-умолчанию double, там чтоб как-то подсказать JITу, что это integer - нужно делать еще те приседания. maytonstd::ratio Тоесть нам нужна биекция между доменом значений NUMBER и нашим типом данных на стороне клиента. std::ratio это вообще не про это подсчет денег, это для теоретизированых математик, это вообще мимо кассы со страшным грохотом http://en.cppreference.com/w/cpp/numeric/ratio/ratio_add ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 15:31 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaсо временем будет опубликовано на github, пока не время :) Чувствую, когда придет время, Стебелек будет повержен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 16:40 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavamaytonstd::ratio Тоесть нам нужна биекция между доменом значений NUMBER и нашим типом данных на стороне клиента. std::ratio это вообще не про это подсчет денег, это для теоретизированых математик, это вообще мимо кассы со страшным грохотом http://en.cppreference.com/w/cpp/numeric/ratio/ratio_add Для nested set может пригодится. http://www.sql.ru/forum/1151532-1/tyapnichnyy-nested-set ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 16:59 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskynojavaсо временем будет опубликовано на github, пока не время :) Чувствую, когда придет время, Стебелек будет повержен стебелек никто не сможет повергнуть. а так - его давно уже купила hooli, если ты понял, о чем я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 17:59 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonnojavaпропущено... std::ratio это вообще не про это подсчет денег, это для теоретизированых математик, это вообще мимо кассы со страшным грохотом http://en.cppreference.com/w/cpp/numeric/ratio/ratio_add Для nested set может пригодится. http://www.sql.ru/forum/1151532-1/tyapnichnyy-nested-set листая подобное, понимаешь - насколько они далеки от народа (с) а всего-то навсего хотелось вариацию на тему Pro*C ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 18:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojava если в Oracle есть свой BCD подобный тип NUMBER, то в C++ есть только IEEE float с потерей точности, за использование которого в финансовых задачах нужно просто брать руки и зажимать их нежно в дверь. как раз в финансовых задачах float очень даже можно использовать, в бухгалтерских нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 23:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivnojavaесли в Oracle есть свой BCD подобный тип NUMBER, то в C++ есть только IEEE float с потерей точности, за использование которого в финансовых задачах нужно просто брать руки и зажимать их нежно в дверь. как раз в финансовых задачах float очень даже можно использовать, в бухгалтерских нельзя. пример, название финансовой задачи, в которой допустимы искажения данных на округлении, приведешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 11:28 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Возможно MasterZiv имеет в виду аналитику и принятие решений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 11:49 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaсо временем будет опубликовано на github, пока не время :) А я-то губу раскатал :) Три года ждать? :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 13:58 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
BagaBaganojavaсо временем будет опубликовано на github, пока не время :) А я-то губу раскатал :) Три года ждать? :)) к 2020 вроде обещвно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 14:04 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Проект Стебелек автор не развивает. Он щас переключился на JSON-подобную dbms. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 14:16 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилBagaBagaпропущено... А я-то губу раскатал :) Три года ждать? :)) к 2020 вроде обещвно а я что, виноват? в этом вашем C/C++ все блин как-то сделано через одно место (в сравнении с той-же Delphi или Java). Хочется допустим в релиз тиснуть развертывание стрека (stacktrace функция, файл, номер строки) при exception, как это сделано в Java, и понеслась - stackwalker.cpp, backtrace() и прочие чудные костыли, 100500 опций компилятора, которые хрен пойми как тискать в эти ваши cmake конфиги, просто чтоб получить striped debug info (не показывать кастомеру излишнее). Причем каждая платформа имеет свои, особо зверские костыли в вопросе, тот-же Mac OS X 10.9 и выше вообще backtrace() разучился понимать, OpenBSD его никогда и не понимал, а в Solaris как всегда свои косяки с addr2line, и... а всем до лампочки. Скажано - stacktrace не нужен, сиди втыкай в coredump, ага (который у клиента не включен, ясен пончик). Вон заставить заработать инлайнинг - тоже нужно блин целое исследование три дня делать, изучать всякую ерунду вроде golden блин linker для clang с плагинами и прочие приседания сделать. ABI несовместимости для .so - следующий квест, и т.д. cmake библиотека уже перевалила вторую тысячу строк. на automake даже смотреть не хочется, не смешно ни разу (под виндой и солярой его никогда не будет). Понаделают же недо решений. Каждый казалось бы простой вопрос - как привинтить ту или иную фичу кроссплатформенно - и нужно брать мачете и проламывать такие дебри, что иногда хочется взять и плюнуть, и перейти на Visual Basic. Уже давно бы перешел, только он не кроссплатформенный :( Как вы вообще умудряетесь работать с такой чудной средой - прямо загадка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 15:14 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojava, не переживай браток. Просто С++ это не твоё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 18:03 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaКаждый казалось бы простой вопрос - как привинтить ту или иную фичу кроссплатформенно Нужда в кроссплатформенности сильно преувеличена. Больше всего стоит разработка и поддержка софта. А платформу можно подогнать под софт какую надо. Стоит это копейки по сравнению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 18:34 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskynojavaКаждый казалось бы простой вопрос - как привинтить ту или иную фичу кроссплатформенно Нужда в кроссплатформенности сильно преувеличена. Больше всего стоит разработка и поддержка софта. А платформу можно подогнать под софт какую надо. Стоит это копейки по сравнению. сильно, не сильно - это до лампочки. есть понятие sanity check - если ты что-то можешь сделать только в MSVC или в GCC, то сто пудов ты это делаешь не так. типичный пример - макросы TODO, которые через pragma message бросают сообщение при билде, которые потом засасывает jenkins и т.п. попробуй сделать это так, чтоб понимало Код: plaintext 1. 2. 3. 4. ну и чтоб работало во всех известных компиляторах. самоудовлетворение от секаса гарантировано. зато есть и полезное на выходе - к примеру все доступные имплементации STRINGIFY(x) макроса выбрасываются в помойку, ибо там нужно STRINGIFY(...), гугл и стэковерфлов чуваки также смело идут в стан ламеров просто потому что они ни разу не пытались свои "солющины" сделать именно кроссплатформенными ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 19:29 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonnojava, не переживай браток. Просто С++ это не твоё. конечно С++ это не мое, программировать на возведенной в абсолют копипасте (это я про темплейты), это пожалуйста пройдите к другому эскулапу. С != С++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 19:33 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaMasterZivпропущено... как раз в финансовых задачах float очень даже можно использовать, в бухгалтерских нельзя. пример, название финансовой задачи, в которой допустимы искажения данных на округлении, приведешь? Например, планирование бюджета предприятия на год... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 21:18 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonВозможно MasterZiv имеет в виду аналитику и принятие решений? Нет, просто бюджетирование. Там не надо до копеек чтобы всё сходилось. Вообще. И даже вредно этого добиваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 21:19 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Хочется допустим в релиз тиснуть развертывание стрека (stacktrace функция, файл, номер строки) при exception, как это сделано в Java, и понеслась - stackwalker.cpp, backtrace() и прочие чудные костыли, 100500 опций компилятора, которые хрен пойми как тискать в эти ваши cmake конфиги, просто чтоб получить striped debug info (не показывать кастомеру излишнее). Это platform specific. Вон заставить заработать инлайнинг - тоже нужно блин целое исследование три дня делать, изучать всякую ерунду вроде golden блин linker для clang с плагинами и прочие приседания сделать. ABI несовместимости для .so - следующий квест, и т.д. inline где надо современные компиляторы очень хорошо делают. Видимо, ты хочешь его добиться там, где не надо... cmake библиотека уже перевалила вторую тысячу строк. на automake даже смотреть не хочется, не смешно ни разу (под виндой и солярой его никогда не будет). Про солярий не скажу, точно не знаю, но под виндой automake есть даже в двух экземплярах. Другое дело, что это -- вообще в корне неверный подход, тупиковая ветвь развития. Правильная -- CMake. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 21:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskynojavaКаждый казалось бы простой вопрос - как привинтить ту или иную фичу кроссплатформенно Нужда в кроссплатформенности сильно преувеличена. Больше всего стоит разработка и поддержка софта. А платформу можно подогнать под софт какую надо. Стоит это копейки по сравнению. Очень правильные слова. На самом деле каждой платформе -- своё назначение. Win -- для UI, (мас туда же), решается QT, и даже линукс захватывает, а вычисления и обработка данных -- Linux, они же WEB-сервера и другие enterprise-приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 21:27 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivnojavaпропущено... пример, название финансовой задачи, в которой допустимы искажения данных на округлении, приведешь? Например, планирование бюджета предприятия на год... эта задача в 99.99% случаев делается в инструменте под названием Excel. но ты продолжай, продолжай, откровения-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 21:55 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivПро солярий не скажу, точно не знаю, но под виндой automake есть даже в двух экземплярах. Другое дело, что это -- вообще в корне неверный подход, тупиковая ветвь развития. Правильная -- CMake. о чем твой спич? под виндой и cygwin есть, и что с того? никто не собирает проекты для студии через automake, я и говорил про это выше. cmake тоже не панацея, в изначальном виде это так, для детского сада по уровню настроек. он не умеет даже striped pdb в relwithdebuginfo делать, о чем там вообще можно говорить. хотя cmake хоть допилить можно, да. угу. каждый девелопер сидит и пилит небось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 21:59 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaMasterZivпропущено... Например, планирование бюджета предприятия на год... эта задача в 99.99% случаев делается в инструменте под названием Excel. но ты продолжай, продолжай, откровения-то. А что, если ты попадаешь на тот самый 0.01% ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 22:58 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavamaytonпропущено... Нет. Арифметика с Infinity/Nan - это все части стандарта IEE 754 и других (тысячи их). Я знаю что JavaScript весьма лукавым образов вводит полиморфизм decimal-типов используя double но и имеет артефакты. Точно не уверен (не специалист в JS) но кажется только индексы массивов кастятся в целое а все остальные вычисления арифметики идут через double. да, в JavaScript вообще все числа по-умолчанию double, там чтоб как-то подсказать JITу, что это integer - нужно делать еще те приседания. maytonstd::ratio Тоесть нам нужна биекция между доменом значений NUMBER и нашим типом данных на стороне клиента. std::ratio это вообще не про это подсчет денег, это для теоретизированых математик, это вообще мимо кассы со страшным грохотом http://en.cppreference.com/w/cpp/numeric/ratio/ratio_add Время через std::ratio<> в стандартной библиотеке считают , так чего бы и деньги не считать? Чето типа таких плясок: http://ideone.com/fCbQEi Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 00:58 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинВремя через std::ratio<> в стандартной библиотеке считают , так чего бы и деньги не считать? Это шаблоны. Настоящим профи такое нельзя ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 02:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonВася Уткинпропущено... std::ratio<1, 100> - чем он хуже, чем в Oracle есть свой BCD подобный тип NUMBER? Они ничем не хуже и не лучше. Когда вы работаете в Oracle PLSQL с типом NUMBER то вы воспроизводите NULL-семантику реляционной алгебры. Тоесть при расчете avg(..) от трех строк в таблице {0,null,6} вы не должны заменять null на 0 а учитывать его как несуществующее значение в коллекции. Тоесть среднее должно быть равно 3 а не 2. Также у вас не должно быть попытки расширять тип NUMBER больше 40 десятичных разрядов на клиенте. Тоесть не должно быть в принципе такой возможности. При сериализации-десериализации не должно быть потерь или внезапных приобретений в значениях числа. Также надо посмотреть в сторону погрешностей расчетов. Нужно 100% эмулировать BCD-арифметику иначе расчеты клиента и сервера где-то не сойдутся. Кому-то последний пункт может показаться не очень важным но это еще один способ стрельнуть себе в ногу в неожиданном месте. Да и кстати, такие пляски для null можно: http://ideone.com/Dr2INK Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. авторsum = 6.0 count = 2 avg = 3.0 sum_select_statment = 6.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 02:53 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВася УткинВремя через std::ratio<> в стандартной библиотеке считают , так чего бы и деньги не считать? Это шаблоны. Настоящим профи такое нельзя ))) Да там вообще человек запутался, темплейты называет копипастой, когда темплейты - это избавление от копипасты. Шаблоны слишком коротко - за количество строк мало заплатят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 03:03 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Обычно платят за бизнес-фичи. Но у вас как-то странно.... количество строк.... Писать надо ровно столько строк чтобы самому было понятно и иметь возможность прошагать отладчиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 09:36 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonОбычно платят за бизнес-фичи.по разному бывает, иначе откуда бы взялся индусский код? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 10:25 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivnojavaпропущено... эта задача в 99.99% случаев делается в инструменте под названием Excel. но ты продолжай, продолжай, откровения-то. А что, если ты попадаешь на тот самый 0.01% ? 0.01% людей ложку в ухо обычно несут, вместо рта, тоже мне достижение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 11:28 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинAnatoly Moskovskyпропущено... Это шаблоны. Настоящим профи такое нельзя ))) Да там вообще человек запутался, темплейты называет копипастой, когда темплейты - это избавление от копипасты. Шаблоны слишком коротко - за количество строк мало заплатят темплейты - это возведенная в абсолют автоматизированная копипаста, так убедительнее звучит? не важно кто копипасту ипсолняет - кодер Вася или компилятор, копипастой от этого она не перестает быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 11:30 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинДа и кстати, такие пляски для null можно: http://ideone.com/Dr2INK можно что угодно, но код выше не отличается лаконичностью, пробуйте еще. заодно попробуйте проверить пограничные значения, ну и уместить это все в 8 байт на значение:) вообще конечно идея, что для простейших арифместических операций нужен какой-то C++ брейнфак с темплейтами, вместо простешего кода ниже Код: plaintext 1. 2. 3. 4. 5. 6. 7. ужасно доставляет. мир кажется сошел с ума и совсем разучился программировать просто и эффективно. больше букв в коде, больше! и < > закорючек, которые означают что-то иное, чем больше и меньше, это чтоб читать было проще, ага ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 11:38 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Я если честно не понял зачем Вася написал этот пример временем. Проверить какое-то утверждение? Возможность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 12:52 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaВася УткинДа и кстати, такие пляски для null можно: http://ideone.com/Dr2INK можно что угодно, но код выше не отличается лаконичностью, пробуйте еще. заодно попробуйте проверить пограничные значения, ну и уместить это все в 8 байт на значение:) вообще конечно идея, что для простейших арифместических операций нужен какой-то C++ брейнфак с темплейтами, вместо простешего кода ниже Код: plaintext 1. 2. 3. 4. 5. 6. 7. ужасно доставляет. мир кажется сошел с ума и совсем разучился программировать просто и эффективно. больше букв в коде, больше! и < > закорючек, которые означают что-то иное, чем больше и меньше, это чтоб читать было проще, ага Т.е. вопрос не в том, что это нельзя сделать в С++, а в том, что типы с таким поведением не введены в стандартную библиотеку С++ и у вас не получается их быстро сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 12:56 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинТ.е. вопрос не в том, что это нельзя сделать в С++, а в том, что типы с таким поведением не введены в стандартную библиотеку С++ и у вас не получается их быстро сделать? знаешь, в булочную можно и через северный полюс ездить. ну и что что долго, но технически это же возможно, верно? в типовом современном зашаблонированном C++ (не берем упрощенку вроде C with objects) между "это в принципе возможно" и "это возможно настолько хорошо и удобно, что это даже можно использовать практически" - зачастую просто пропасть, и твой пример - подтверждение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 13:02 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaвообще конечно идея, что для простейших арифместических операций нужен какой-то C++ брейнфак с темплейтами, вместо простешего кода ниже Код: plaintext 1. 2. 3. 4. 5. 6. 7. ужасно доставляет. мир кажется сошел с ума и совсем разучился программировать просто и эффективно. больше букв в коде, больше! и < > закорючек, которые означают что-то иное, чем больше и меньше, это чтоб читать было проще, агаВас расстраивает, что в стандарте С++ нет ваших qty_t, price_t, money_t? Так ведь у всех требования разные. Кто-то уверен, что его программе никогда не придется оперировать с суммами больше квинтиллиона долларов, и его устраивает тот самый где-то упомянутый тип Currency с внутренним представлением в int64, фиксированной точкой и игнорированием переполнения. Кому-то мало 4 знаков после точки. Кто-то не уверен, что квинтиллиона ему хватит, и хочет кидать исключения при переполнении. А кто-то уверен, что квинтиллиона не хватит, и использует BigNumber :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 13:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Я в посте увидел другое. Постулируется подход что когда у тебя нет финансового типа - ты берешь эдакий себе конструктор LEGO и собираешь из шаблончиков нужный тип. Ответственность за правильность решения при этом не обсуждается и предполагается что кодер сам знает что он делает. Вопросы оптимизации этого типа (как он внутри будет считать) мы как-то сразу скипаем. Мы также игнорируем возможные ошибки которые существуют на стыке технологий. Тоесть ошибка в рантайме происходит не в вашем коде а где-то в недрах шаблонизировнного кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 13:31 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Barlonenojavaвообще конечно идея, что для простейших арифместических операций нужен какой-то C++ брейнфак с темплейтами, вместо простешего кода ниже Код: plaintext 1. 2. 3. 4. 5. 6. 7. ужасно доставляет. мир кажется сошел с ума и совсем разучился программировать просто и эффективно. больше букв в коде, больше! и < > закорючек, которые означают что-то иное, чем больше и меньше, это чтоб читать было проще, агаВас расстраивает, что в стандарте С++ нет ваших qty_t, price_t, money_t? Так ведь у всех требования разные. Кто-то уверен, что его программе никогда не придется оперировать с суммами больше квинтиллиона долларов, и его устраивает тот самый где-то упомянутый тип Currency с внутренним представлением в int64, фиксированной точкой и игнорированием переполнения. Кому-то мало 4 знаков после точки. Кто-то не уверен, что квинтиллиона ему хватит, и хочет кидать исключения при переполнении. А кто-то уверен, что квинтиллиона не хватит, и использует BigNumber :) не думаю, что имеет смысл рассматривать бесконечные границы безумия. а так - для определенного класса задач (скажем так, 99.9% случаев) существуют вполне себе разумные и общепринятые правила. к примеру уже не осталось стран, которые используют что-то, кроме 1/100 для денег, а суммарный ВВП за всю историю человечества тоже вполне расчитываемая и конечная величина, квинтиллионы там не нужны. т.е. для подчета денег вполне достаточно fixed number, производного от int, с точностью два знака. к примеру мировой ВВП в прошлом году это всего 73 триллиона. 92233 позволит этот ВВП суммировать 1263 раз. этого более чем достаточно для всех практических бухгалтерских и финансовых задач - ну не может быть в задаче больше денег, чем человечество способно в принципе произвести. так это еще с точностью до копейки, а если без копейки - это 126300 раз - больше, чем в обозримой перспективе человечество вообще сможет денег запродуцировать. Код: plaintext 1. 2. в этом и отличается прагматический инженерный подход и "стандартная обобщенная хрень". на самом деле никому ничего не нужно обобщать - все случаи задач они довольно конкретны, и уж поверьте, специфика машинных вычислений для инженеров и ученых от физики она своя, а для экономистов - своя, и надо их обобщать. а ученые от теорматематки вообще идут отдельным лесом, давайте их чудные комплексные числа бухгалтерам тиснем, для начала? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 13:31 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Двух знаков недостаточно :) Вон на всех биржах цены с 4 знаками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 14:06 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojava Код: plaintext 1. 2. Замечательное кстати число https://lenta.ru/news/2013/07/17/paypal/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 14:08 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Я не думаю что ВВП возможно посчитать до копейки. Тут скорее важно оценить. И принять решение. А вот в налоговых вопросах - там да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 14:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Barlonenojava Код: plaintext 1. 2. Замечательное кстати число https://lenta.ru/news/2013/07/17/paypal/ это они просто -1 в unsigned видать закастили и не сделали проверки на переполнение. после этого случая, уверен, доработали проверки. а так да - пример того, что PayPal испольузует fixed number от int64 - лишний раз доказывает, как нужно правильно нужно считать деньги. и как не надо делать - не делать проверки переполнения и кастования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 14:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
BarloneДвух знаков недостаточно :) Вон на всех биржах цены с 4 знаками. а вообще-то суммы (деньги) и цены - это разные типы. money_t - это всегда два знака price_t - это как минимум 6 знаков с количествами отдельная печаль (там знаков может быть до 9) у бирж все проще - у них нельзя купить половину акции. а вот в области производства и торговли ресурсами - запросто можно купить 1.2321234112 тонны - это нужно, чтоб вписаться до копейки в сумму аванса для счет-фактур. потому вопрос - какой там фундаментальный тип использовать для этого всего - он не должен озадачивать прикладного говнокодера. ему нужно конкретно сказать - вот тут money_t, тут price_t, а тут qty_t, и не вздумай попутать или заюзать double - расстрел на месте. заставить его думать, что там ему тиснуть в параметры std шаблона - это вообще космической наивности и глупости предположения. нет там таких интеллектуалов среди прикладников, чтоб они изначально разбирались в предметах и требованиях точности расчетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 14:18 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaк примеру мировой ВВП в прошлом году это всего 73 триллиона. 92233 позволит этот ВВП суммировать 1263 раз. этого более чем достаточно для всех практических бухгалтерских и финансовых задач - ну не может быть в задаче больше денег, чем человечество способно в принципе произвести. так это еще с точностью до копейки, а если без копейки - это 126300 раз - больше, чем в обозримой перспективе человечество вообще сможет денег запродуцировать Это смотря в какой валюте Нет универсального подходящего для всех решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 14:39 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Для денег double достаточно. Чтобы погрешность в 16м десятичном знаке исказила результат - надо постараться. Для расчетов это не критично. Другое дело что их нельзя сравнивать, и при сортировке проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 14:59 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaтемплейты - это возведенная в абсолют автоматизированная копипаста, так убедительнее звучит? не важно кто копипасту ипсолняет - кодер Вася или компилятор, копипастой от этого она не перестает быть. Не больший копипаст чем инлайн ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 15:02 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskynojavaтемплейты - это возведенная в абсолют автоматизированная копипаста, так убедительнее звучит? не важно кто копипасту ипсолняет - кодер Вася или компилятор, копипастой от этого она не перестает быть. Не больший копипаст чем инлайн ты опять решил сесть в лужу? говорили же, для чего нужен инлайнинг - для вкомпиляции некроссплатформенных intrinsic и built-in, без создания абсолютно ненужных stack frame. и даже если в чистом виде - inline он виден лишь желающим почитать ассемблерный код. а эти об эти ваши темплейты нужно ломать глаза каждый день, опять-же, делая парсинг в голове на тему что это за закорючка - сравнение или все-таки чего-то там инстациирование. при этом даже гуру C++ прямо говорят - идея, что давайте все раскопипастим, а компилятор все это чудесно заоптимизирвет - оказалась пшиком, никакого прироста производительности никто так и не смог достичь, зато исполнимый код бухнет, вымывая L2/L3 кеши просто на ура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 15:45 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Barlonenojavaк примеру мировой ВВП в прошлом году это всего 73 триллиона. 92233 позволит этот ВВП суммировать 1263 раз. этого более чем достаточно для всех практических бухгалтерских и финансовых задач - ну не может быть в задаче больше денег, чем человечество способно в принципе произвести. так это еще с точностью до копейки, а если без копейки - это 126300 раз - больше, чем в обозримой перспективе человечество вообще сможет денег запродуцировать Это смотря в какой валюте Нет универсального подходящего для всех решения. да, про случаи гиперинфляции я тоже думал. но практически... они там все дружно применяют номинаторы, если у тебя буханка хлеба стоит триллион, то слово триллион становится чем-то вроде синонима рубль, т.е. самоназвание денег. а по факту - помня гиперинфляции 90-х, там никто не считал деньги в нацвалюте, базовый учет был в у.е., а в нац.валюту пересчитывали уже в самый последний момент. хотя да, пример Зимбабве и к ним приравненных говорит о том, что fixed number не годится для универсального money_t, туда только decimal number (но опять-же, появляется проблема с бинарной сортировкой). или запилить zimbabve_t, с отрицательной точностью :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 15:57 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaчто это за закорючка - сравнение или все-таки чего-то там инстациирование Первый раз вижу чтобы с этим у кого-то были трудности )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 19:22 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaMasterZivПро солярий не скажу, точно не знаю, но под виндой automake есть даже в двух экземплярах. Другое дело, что это -- вообще в корне неверный подход, тупиковая ветвь развития. Правильная -- CMake. о чем твой спич? под виндой и cygwin есть, и что с того? никто не собирает проекты для студии через automake, я и говорил про это выше. cmake тоже не панацея, в изначальном виде это так, для детского сада по уровню настроек. он не умеет даже striped pdb в relwithdebuginfo делать, о чем там вообще можно говорить. хотя cmake хоть допилить можно, да. угу. каждый девелопер сидит и пилит небось :) Да, видать, ты большой знаток, может подскажешь, что же надо ВМЕСТО CMake-то ? А то я и не знаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 20:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TДля денег double достаточно. Чтобы погрешность в 16м десятичном знаке исказила результат - надо постараться. Для расчетов это не критично. Другое дело что их нельзя сравнивать, и при сортировке проблемы. Тут сложность в чем... в преобразованиях double=> String => double. Они не биективные. И если ты даешь возможность разработчику использовать double как хранилище для денежных типов - то у него неизбежно появляется соблазн использовать их на всем спектре операций. А от этого сложно застраховаться. И если на целых числах double ведет себя вполне прилично то на дробных у нас появляется слабо контролируемая возможность "пальнуть" себе в ногу. Я видел если не приложения то SOAP-сервисы которые возвращали финансовые величины через double. Возможно это и не так плохо. А вот реально плохо когда идёт распространение этого типа на всё приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 20:25 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaо чем твой спич? под виндой и cygwin есть, и что с того? никто не собирает проекты для студии через automake, я и говорил про это выше. Ну, понятно, что никто, но тебе же он был зачем-то нужен... Мне лично automake и под линухом, где он вообще царь и бог, на фиг не сдался. Это путь в никуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 20:26 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaMasterZivпропущено... А что, если ты попадаешь на тот самый 0.01% ? 0.01% людей ложку в ухо обычно несут, вместо рта, тоже мне достижение бывает, что надо и ложку в ухо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 20:28 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaВася УткинТ.е. вопрос не в том, что это нельзя сделать в С++, а в том, что типы с таким поведением не введены в стандартную библиотеку С++ и у вас не получается их быстро сделать? знаешь, в булочную можно и через северный полюс ездить. ну и что что долго, но технически это же возможно, верно? в типовом современном зашаблонированном C++ (не берем упрощенку вроде C with objects) между "это в принципе возможно" и "это возможно настолько хорошо и удобно, что это даже можно использовать практически" - зачастую просто пропасть, и твой пример - подтверждение есть gmp, и есть её С++ врапер, если тебе надо... boost.multiprecition... Есть и мнго других подобных библиотек, выбирай на вкус... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 20:32 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaBarloneДвух знаков недостаточно :) Вон на всех биржах цены с 4 знаками. а вообще-то суммы (деньги) и цены - это разные типы. money_t - это всегда два знака price_t - это как минимум 6 знаков с количествами отдельная печаль (там знаков может быть до 9) у бирж все проще - у них нельзя купить половину акции. а вот в области производства и торговли ресурсами - запросто можно купить 1.2321234112 тонны - это нужно, чтоб вписаться до копейки в сумму аванса для счет-фактур. потому вопрос - какой там фундаментальный тип использовать для этого всего - он не должен озадачивать прикладного говнокодера. ему нужно конкретно сказать - вот тут money_t, тут price_t, а тут qty_t, и не вздумай попутать или заюзать double - расстрел на месте. заставить его думать, что там ему тиснуть в параметры std шаблона - это вообще космической наивности и глупости предположения. нет там таких интеллектуалов среди прикладников, чтоб они изначально разбирались в предметах и требованиях точности расчетов. nojava, у меня к тебе только один вопрос: тебе таксовать надо, или нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 20:36 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonDima TДля денег double достаточно. Чтобы погрешность в 16м десятичном знаке исказила результат - надо постараться. Для расчетов это не критично. Другое дело что их нельзя сравнивать, и при сортировке проблемы. Тут сложность в чем... в преобразованиях double=> String => double. Они не биективные. И если ты даешь возможность разработчику использовать double как хранилище для денежных типов - то у него неизбежно появляется соблазн использовать их на всем спектре операций. А от этого сложно застраховаться. И если на целых числах double ведет себя вполне прилично то на дробных у нас появляется слабо контролируемая возможность "пальнуть" себе в ногу. Я видел если не приложения то SOAP-сервисы которые возвращали финансовые величины через double. Возможно это и не так плохо. А вот реально плохо когда идёт распространение этого типа на всё приложение. я до сих пор на фоксе пишу в основном, а там все числовые переменные double, судя по хэлпу (ограничения совпадают), там нет явных типов, я не могу написать int x, я пишу x = 1 (но это не int а double). ХЗ как там подточено, но select ... order by nPrice, cOther отрабатывает корректно. if x = y тоже корректно, хотя double нельзя сравнивать. Как-то допилили. ИМХУ надо аппаратно, т.е. в асме, в железе, добавить округление double до заданного разряда после запятой (в идеале десятичного, но и двоичного хватит) и тогда проблема порешается, т.к. куча софт-велосипедов не устоит перед хард-велосипедом, а интел молчит и делает вид что проблемы нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 21:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima Tя до сих пор на фоксе пишу в основном, а там все числовые переменные double, судя по хэлпу (ограничения совпадают), там нет явных типов, я не могу написать int x, я пишу x = 1 (но это не int а double). ХЗ как там подточено, но select ... order by nPrice, cOther отрабатывает корректно. if x = y тоже корректно, хотя double нельзя сравнивать. Как-то допилили. Да нет, там десятичная арифметика реализована... Dima TИМХУ надо аппаратно, т.е. в асме, в железе, добавить округление double до заданного разряда после запятой (в идеале десятичного, но и двоичного хватит) и тогда проблема порешается, т.к. куча софт-велосипедов не устоит перед хард-велосипедом, а интел молчит и делает вид что проблемы нет. Нет, не решит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 21:29 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 21:45 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivДа нет, там десятичная арифметика реализована... Я про переменные писал, не про типы полей (NUMERIC в DBF десятично хранится как строка из цифр). а просто переменная имеет ограничение в точности 15 десятичных разрядов, нагуглить сходу не получилось, но поверь так и есть. 15 разрядов ничем double не напоминают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 21:52 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonДимыч. Ты - реликт. Тебя надо в музей сдать с табличкой Да, реликт. Ты смысл слова реликт читал? Суть "выжил там где другие подобные не смогли", а выжил потому что рядовому юзеру глубоко фиолетово на все супермодные тенденции в программировании, ему главное чтобы работало и не тормозило. Меня убить может только отказ МС от x32 или смерть МС. Второе вероятнее, т.к. есть Win10x32 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 22:02 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T, А та на коболе или PL/1 писал чтоб реликтом называться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 22:08 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima T, А та на коболе или PL/1 писал чтоб реликтом называться? а я не назывался, меня так mayton назвал, а я согласился. Дело не в "писал", а в том что писанина жива. У меня до сих пор пашет прога на FoxPro 2.6 (под DOS), 8 рабочих мест, написано мною 15 лет назад и заброшено, а народ пользуется, я поддерживаю только как админ, сглючило - починю, никаких доработок функционала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 22:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Ладно стопы-стопы. Никто не реликт. Я пошутил. Это я со своим Sinclar-ом здесь - реликт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 22:27 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonНикто не реликт. Я пошутил. Ну вот :( а мне так приятно было такое обращение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 22:31 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivnojavaпропущено... о чем твой спич? под виндой и cygwin есть, и что с того? никто не собирает проекты для студии через automake, я и говорил про это выше. cmake тоже не панацея, в изначальном виде это так, для детского сада по уровню настроек. он не умеет даже striped pdb в relwithdebuginfo делать, о чем там вообще можно говорить. хотя cmake хоть допилить можно, да. угу. каждый девелопер сидит и пилит небось :) Да, видать, ты большой знаток, может подскажешь, что же надо ВМЕСТО CMake-то ? А то я и не знаю... ничего лучше cmake в настоящее время нет. как платформы. но настройки его по-умолчанию никуда не годятся, к примеру даже гугл ничего не знает про cmake pdbstriped что не может не удивлять - неужчто ни у кого не возникла еще идея отправлять .pdb для того, чтоб получить полноценный stacktrace? это лишь один из вопросов. таких вопросов там вагон и тележка, мне пришлось написать 2000 строк, чтоб привести его настройки в чувство. не думаю, что каждый C++ девелопер способен на такой подвиг, и что он вообще должен такой подвиг делать. но для кроссплатформы - да, ничего лучше нет. зато сколько не качаешь проектов известных, или библиотек - везде, гыгы, поставляют .sln вайлы, что даже как-то не смешно. говорит о многом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 22:47 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivДа нет, там десятичная арифметика реализована... Я про переменные писал, не про типы полей (NUMERIC в DBF десятично хранится как строка из цифр). а просто переменная имеет ограничение в точности 15 десятичных разрядов, нагуглить сходу не получилось, но поверь так и есть. 15 разрядов ничем double не напоминают? Нет, не напоминают... В double НЕТ этих разрядов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 22:56 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivВ double НЕТ этих разрядов. читай вики мантисса 52 бита, 2^52 = 4503599627370496 или ~4,5*10^15. Понял откуда 15 десятичных разрядов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 23:03 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaзато сколько не качаешь проектов известных, или библиотек - везде, гыгы, поставляют .sln вайлы, что даже как-то не смешно. говорит о многом Это ни о чём не говорит, народ спрашивает: а где у вас .sln ? Ему и говорят: на, держи, если тебе так надо. К тому же CMakе достаточно молод, и многие проекты его старше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 23:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivВ double НЕТ этих разрядов. читай вики мантисса 52 бита, 2^52 = 4503599627370496 или ~4,5*10^15. Понял откуда 15 десятичных разрядов? Дима имеет в виду что такое фиксируется: Код: plaintext 1. А если добавлять дробную часть или увеличивать мантиссу то точность теряется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 23:20 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivnojavaпропущено... знаешь, в булочную можно и через северный полюс ездить. ну и что что долго, но технически это же возможно, верно? в типовом современном зашаблонированном C++ (не берем упрощенку вроде C with objects) между "это в принципе возможно" и "это возможно настолько хорошо и удобно, что это даже можно использовать практически" - зачастую просто пропасть, и твой пример - подтверждение есть gmp, и есть её С++ врапер, если тебе надо... boost.multiprecition... Есть и мнго других подобных библиотек, выбирай на вкус... абсолютно все неадекватны, потому что их еще и в базе данных нужно данные. вот есть IEEE формат decimal128. отлично подходит. но запаливать 16 байт чтоб сохранить число вида 12.3 - это финиш. известные базы данных, судя по исходникам (mysql, postgresql) используют тип Decimal/NUMERIC как BСD вариации, с переменной длиной. идея хорошая, но реализация так себе. и классический мейнфреймовый packed BCD - слишком низкая плотность кодирования. плюс BCD, и DFP типы имеют еще существенный косяк - они не поддерживаются процессорами (x64), даже сложение делается через библиотечные крайне тормозные функции. пока мне видится лишь одно более менее идеальное решение - fixed-point number на int64 , с упаковкой в базу данных значения целого методом LEB кодирования. так получается наименьшие затраты как на хранение на диске, так и в памяти, при этом сложение, вычитание - делаются на нативной скорости процессора (ибо это суть обычные целочисленные сложения), а деление и умножение лишь немного подторможены в сравнению с int. одна печаль - зимбабве с их триллиардами, но думаю и тут есть решение (нужно просто рассмотреть отрицательную предопределенную значность, эдакий number(-10), когда миллионы и миллиарды будут гарантировано представлены как нули. можно и int128 fixed-point сделать, но, мягко говоря, не все процессоры могут арифметику в общем боротьба трываэ (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 23:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
война с мельницами в полный рост суть страчена ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 03:32 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivВ double НЕТ этих разрядов. читай вики мантисса 52 бита, 2^52 = 4503599627370496 или ~4,5*10^15. Понял откуда 15 десятичных разрядов? там разряды двоичные. 52 двочных разряда это не то же самое, что 15 десятичных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 05:00 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Siemarglвойна с мельницами в полный рост суть страчена не совсем с мельницами. существующие подходы и библиотеки - это разношерстное нагромождение исторических нелепостей(big-endian), заблуждений (бывают 7-ми битные компы) и простоо устаревших подходов(к примеру - не более 32 бита). потому если и лепить ультимативную среду-платформу-библиотеку, то нужно переосмыслить существующее и накопленное, и выбрать лучшее. а так как время и ресурсы неограничены - то даже универсальный и оптимальный тип для денег можно выбирать довольно долго вот осознание пришло о разном формате хранения на диске(сериализации по сети в тч) и в памяти - уже мегапрогресс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 11:22 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TДля денег double достаточно. Чтобы погрешность в 16м десятичном знаке исказила результат - надо постараться. Для расчетов это не критично. Другое дело что их нельзя сравнивать, и при сортировке проблемы. Дима, это утверждение примерно того же сорта осведомленности о программировании, что и "money_t - это всегда два знака" Проблемы у double при сортировке - простое следствие несравнимости. Одной несравнимости достаточно - если ты не можешь надежно судить - одинаково ли количество денег в двух кошельках, то, может быть, что-то не так с твоей математикой. Но все гораздо хуже. Пусть есть некий double. Известна его мантисса и показатель степени. Ближайшие значения к заданному double слева и справа определяются значениями мантиссы. Между заданным и ближайшим (с любой стороны) никаких других представимых чисел нет. То есть - вблизи нуля double-чисел "много", а по краям "мало" - они гораздо реже посажены, Т.е. добавляя минимально допустимую денежную единицу (копейку) к уже накопленной сумме, ты, рано ли поздно, перестанешь сдвигаться в сумме накопления. Такое сложение застрянет на далее неизменной накопленной сумме в тот момент, когда расстояние до ближайшего числа превысит копейку. Вряд ли это можно признать за удачную денежную математику. Которая, там, где есть, так или иначе, опирается на целочисленную парадигму - добавление единицы дает либо новое число, либо переполнение, но не оставляет аккумулятор неизменным. PS Прошу прощения за вступление на чужую территорию. Оправдываюсь тем, что существо дела здесь к CPP отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 12:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 13:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
mayton, ты это к чему? к тому, что вам это не интересно? Это может как-то отменить бесконечный цикл, или изменить результат добавления к миллиарду копейки ? А так-то оно понятно - нахер они кому сдались - одинаковые чиселки в итого по дебету и кредиту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 13:47 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
booby, что за враждебность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 14:48 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
boobyПрошу прощения за вступление на чужую территорию. Оправдываюсь тем, что существо дела здесь к CPP отношения не имеет. Не волнуйтесь, в этом топике мало что имеет отношение к С++. Больше к цирку ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 15:11 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
mayton, ой. (; (извини, я не предполагал, что ты соберешься пугаться обижаться) всяко слово может иметь значение, не иметь, или его значение зависит от контекста. в последовательности слов твое было по времени комментарием на мое. смутило меня // 9e15 Дальше не враждебность, а ответ на один из контекстов, в котором оно могло появиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 15:16 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Ладно проехали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 15:31 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivтам разряды двоичные. 52 двочных разряда это не то же самое, что 15 десятичных... Давай с другой стороны: у тебя 52-хбитное беззнаковое целое. Вопрос какое максимальное число состоящее из девяток (в десятичном представлении) можно хранить? Сколько девяток максимум возможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 18:45 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
mayton Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Ну, нормальная потеря значимости. О ней booby и говорил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 20:06 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivтам разряды двоичные. 52 двочных разряда это не то же самое, что 15 десятичных... Давай с другой стороны: у тебя 52-хбитное беззнаковое целое. Вопрос какое максимальное число состоящее из девяток (в десятичном представлении) можно хранить? Сколько девяток максимум возможно? И с этой точки зрения тоже нельзя. Потому что double / float -- это не целые. А числа с нормализованной мантиссой и порядком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 20:09 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivПотому что double / float -- это не целые. А числа с нормализованной мантиссой и порядком. Мы на форуме философов-теоретиков или все-таки технарей? Давай в цифрах рассуждать. Я прекрасно знаю что есть догма "расчеты в числах с плавающей запятой неточны". Я знаю откуда она родилась. Из float , т.к. там мантисса всего 23 бита, 2^23 = 8388608, т.е. даже до 9 десятичных разрядов не дотягивает. Забудь про float. У double мантисса 52 бита и в них влазит ровно столько сколько влазит в 52 бита, как их логически трактовать вообще без разницы, это просто хранилище емкостью 52 бита. Вспомни математику, мантисса это именно начало числа (неважно двоичное оно или десятичное), т.е. первые N разрядов, а порядок это просто смещение где поставить разделительную точку. Так вот это N = 52 в двоичной или = 15 в десятичной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 20:50 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Мне кажется в споре о float/double мы просто можем рассмотреть конкретные случай потери точности (присвоение, добавление копейки, сравнение) и оценить насколько эти случаи опасны или критичны для финансовой арифметики. Один случай я очертил. И мантиссу можно уточнить. Там явно будет не 9*10^15 а другое число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 20:50 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TМы на форуме философов-теоретиков или все-таки технарей? Давай в цифрах рассуждать. Я прекрасно знаю что есть догма "расчеты в числах с плавающей запятой неточны". Я знаю откуда она родилась. Из float , т.к. там мантисса всего 23 бита, 2^23 = 8388608, т.е. даже до 9 десятичных разрядов не дотягивает. Дима подожди. Не горячись. Давай применительно к float/double и IEE754 рассмотрим режимы т.н. Floating-Point Behavior https://msdn.microsoft.com/en-us/library/e7s85ffb.aspx и как они могут повлиять на результат. А после этого еще дополним наши тезисы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 21:45 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
А тут и горячиться не надо: используете float/double - добро пожаловать в удивительный мир приближённых вычислений. А в мире приближённых вычислений надо и за порядком следить и за используемыми формулами, а не только за алгоритмами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 22:07 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Василий. Стоп-стоп. У нас есть уже конкретные вопросы. Дима - человек дотошный. Он ставит вопрос о смысле 52 битов мантиссы. Он считает что есть взаимное и однозначное соотвенствие между целым числом в 52 бита и double числом где мантисса соотсветствует этим битам. Я плюсую но дополнительно вспомниаю что есть relaxing the rules - и даю ссылку на опции Visual C++ и предлагаю обсудить. Я также предлагаю перечислить конкретные кейсы где double/float будет терять копейки. А ты возвращаешь нас контекст философии и говоришь дескыть "добро пожаловать в удивительный мир.." Ну к чему это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 22:23 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonНу к чему это?К тому, что "расширенная плавучка" (80-битный extended) - специфика интел, которая позволяет работать с более высокой точностью на промежуточных вычислениях и разово округлить только конечный результат. А "удивительный мир приближённых вычислений" при том, что это может (сильно) отличаться "считаем всё в 64-битном представлении". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 22:29 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonЯ также предлагаю перечислить конкретные кейсы где double/float будет терять копейкиЭто имеет смысл, когда в результате получается исчерпывающий список причин и рекомендаций. А здесь - явно не тот случай. "Копейки теряются" вне зависимости от используемых чисел - как только появляются операции деления, могут появиться и дробные копейки. Это вообще никак не зависит от представления числа. Нельзя избежать "дробных копеек" можно только минимизировать вероятность их появления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 22:37 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivПотому что double / float -- это не целые. А числа с нормализованной мантиссой и порядком. Мы на форуме философов-теоретиков или все-таки технарей? Давай в цифрах рассуждать. Я прекрасно знаю что есть догма "расчеты в числах с плавающей запятой неточны". Я знаю откуда она родилась. Из float , т.к. там мантисса всего 23 бита, 2^23 = 8388608, т.е. даже до 9 десятичных разрядов не дотягивает. да дело не в этом, какая там мантисса длиной, а в том, что дроби разные, одни десятичные (в представлении людей), другие -- двоичные. Понятие "иррациональное число" знаешь ? Вот ещё подумай, что рациональное число в одной системе счисления не обязательно является рациональным числом в другой системе счисления. Примеры -- числа 0.1 и 0.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 22:57 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov"Копейки теряются" вне зависимости от используемых чисел - как только появляются операции деления, могут появиться и дробные копейки. Это вообще никак не зависит от представления числа. Нельзя избежать "дробных копеек" можно только минимизировать вероятность их появления. Прошу прощения. Я здесь не спорю а просто дополняю. Привожу фрагмент статьи Никлауса Вирта. http://citforum.ck.ua/programming/digest/wirth/ Представление чисел Здесь ключевым вопросом является выбор основания числа. Практически все ранние компьютеры характеризовались основанием 10 - представление на основе десятичных цифр, как каждого из нас учат в школе. Однако двоичное представление с использованием двоичных цифр является, очевидно, более экономичным. Для представления целого числа n требуется log10(n) десятичных цифр, но всего лишь log2(n) двоичных цифр (бит). Поскольку для представления десятичной цифры требуется четыре бита, для десятичного представления требуется примерно на 20% больше памяти, чем для двоичного, что показывает очевидное преимущество двоичной формы. Тем не менее, разработчики долгое время сохраняли десятичное представление, и оно присутствует и сегодня в форме библиотечного модуля. Это связано с тем, что разработчики продолжали верить в необходимость точности всех вычислений. Однако ошибки возникают при округлении, например, после выполнения операции деления. Эффекты округления могут различаться в зависимости от способа представления чисел, и двоичный компьютер может выдать результаты, отличающиеся от результатов десятичного компьютера. Поскольку финансовые транзакции - где более всего существенна точность - традиционно выполнялись вручную с использованием десятичной арифметики, разработчики полагали, что компьютеры должны производить во всех случаях те же результаты - и, следовательно, фиксировать те же ошибки. Двоичная форма в общем случае приводит к более точные результатам, но десятичная форма остается предпочтительным вариантом в финансовых приложениях, поскольку десятичный результат в случае потребности легко проверить вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:05 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Дима. По поводу давно забытого Card-Raytracer benchmark. https://sourceforge.net/p/card-raytracer-bench/code/HEAD/tree/trunk/cpp/ Помнится ты заметил что в идентичных сорцах картинки не были численно-точно равны. Даже при том что мы включили одинаковый конгруэнтный ГПСЧ для всех сорцов и ЯП. Мы тогда списали это на погрешность вычислений и забили болт. Не стали детально разбираться. А я вот щас предполагаю что РЕАЛИЗАЦИЯ работы floating-point вычислений (библиотечные функции, FPU-80bit (extended double), или инструкции SSE) могли как раз повлиять на результат при том при всём что стандарт представления числа IEE-754 вобщем не нарушался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonЯ здесь не спорю а просто дополняю. Привожу фрагмент статьи Никлауса Вирта.А я говорю о том, что "дробные копейки" - вещь принципиальная и не зависит от представления числа (двоичное или десятичное). Более того, выбор представления оказывает влияние только для дробных чисел, но любые дробные числа с фиксированной запятой можно превратить в целые путём умножения на целый нормирующий коэффициент. В результате, представление нас уже не колышет, а вот дробные копейки - продолжают существовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivВот ещё подумай, что рациональное число в одной системе счисления не обязательно является рациональным числом в другой системе счисления. да неужели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:28 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Наверное имеется в виду что в троичной системе счисления мы можем точно представить 1/3 а в двоичной будет бесконечная дробная часть близкая к 1/3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:31 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Да понятно, что имелось в виду, но неточность формулировок - вещь опасная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:33 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivПотому что double / float -- это не целые. А числа с нормализованной мантиссой и порядком. Мы на форуме философов-теоретиков или все-таки технарей? Давай в цифрах рассуждать. Я прекрасно знаю что есть догма "расчеты в числах с плавающей запятой неточны". Я знаю откуда она родилась. значит, все же не знаешь, потому как 1) это не догма, 2) от разрядности неточность не зависит, в смысле, даже увеличивая разряднрсть точности не достичь, поскольку обусловлена она именно формой представления числа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:34 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
P.S. Школьную математеку так сильно обрезали, что о бесконечных периодических и непериодических дробях уже не рассказывают? Мы проходили это в девятом классе средней общеобразовательной школы без всяких "уклонов". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:36 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZiv2) от разрядности неточность не зависит, в смысле, даже увеличивая разряднрсть точности не достичь, поскольку обусловлена она именно формой представления числа.Точность зависит от многих факторов и представление - всего лишь один из этих факторов. И далеко не всегда - главный или, хотя бы, определяющий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:38 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
По поводу 15 дес. разрядов. Возможно в этих константах есть некоторые полезные значения. http://en.cppreference.com/w/cpp/types/climits К сожалению на моем жлобском MinGW часть из них нелетают. Может версия протухла. gcc version 5.3.0 (x86_64-win32-sjlj-rev0, Built by MinGW-W64 project) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2016, 23:55 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Десятичный логарифм двойки ~= 0,3010 (таблицы Брадиса, если кто в курсе). Вариант 10**3 == 2**10 проще, но менее точен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 00:06 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T... Мы на форуме философов-теоретиков или все-таки технарей? ... (как все запущено-то, оказывается) Не используют floating point numbers для денежных вычислений. Без теории, на самой что ни на есть практике - не используют . Не было ни у Кернигана, ни у Риччи цели создавать язык, пригодный для финансовых вычисления. Ясно и очевидно стояла иная цель - создать такой язык, на котором можно было бы перезапрограммировать наново все, что уже напрограммировано в ЦЕРНе на фортране. Тут, раз нет фортрана без float binary double, то и C без него жить не будет - наличие обязательно. А Грейс Хоппер ни для чего иного, как для расчета зарплаты свой кобол и не создавал. Потому там fixed point арифметика вшита до рождения языка. Без нее сам язык смысла не имеет. А создали ады - не знали, зачем министерство обороны США им язык заказывает - траекторию полета баллистических ракет считать или доходы от продажи оружия. Поэтому встроили возможность и деньги считать, хоть это никому и не понадобилось. MasterZiv Ну, нормальная потеря значимости. О ней booby и говорил. (задумчиво) ну, sort of... Строго говоря я говорил о плавающей абсолютной точности. А "потеря значимости", имхо, чаше обсуждается в контекстах, о которых пишет Basil A. Sidorov. И, если сложение теряет значащие цифры частично, сохраняя относительную точность результата (15-16 десятичных цифр для binary float), то вычитание обладает специальным свойством "катастрофической" потери точности, когда в результате может теряться произвольное количество точных десятичных цифр, вплоть до всех 16и разом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 00:43 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
boobyDima T... Мы на форуме философов-теоретиков или все-таки технарей? ... (как все запущено-то, оказывается) Не используют floating point numbers для денежных вычислений. Без теории, на самой что ни на есть практике - не используют . Не было ни у Кернигана, ни у Риччи цели создавать язык, пригодный для финансовых вычисления. Ясно и очевидно стояла иная цель - создать такой язык, на котором можно было бы перезапрограммировать наново все, что уже напрограммировано в ЦЕРНе на фортране. Тут, раз нет фортрана без float binary double, то и C без него жить не будет - наличие обязательно. А Грейс Хоппер ни для чего иного, как для расчета зарплаты свой кобол и не создавал. Потому там fixed point арифметика вшита до рождения языка. Без нее сам язык смысла не имеет. А создали ады - не знали, зачем министерство обороны США им язык заказывает - траекторию полета баллистических ракет считать или доходы от продажи оружия. Поэтому встроили возможность и деньги считать, хоть это никому и не понадобилось. MasterZiv Ну, нормальная потеря значимости. О ней booby и говорил. (задумчиво) ну, sort of... Строго говоря я говорил о плавающей абсолютной точности. А "потеря значимости", имхо, чаше обсуждается в контекстах, о которых пишет Basil A. Sidorov. И, если сложение теряет значащие цифры частично, сохраняя относительную точность результата (15-16 десятичных цифр для binary float), то вычитание обладает специальным свойством "катастрофической" потери точности, когда в результате может теряться произвольное количество точных десятичных цифр, вплоть до всех 16и разом. Всё запущено с вашим количество сообщений в ветке Microsoft Access. Не используют? Вы серьезный финансовый аналитик-программист? Или вы на С/С++ пишите код с утра до вечера? Почитайте пожалуйста, если у вас будет свободное время. Господин Брайан Керниган не создавал язык Си, и тем более С++. Дальше вы пишите что может быть что-то при сложение, что-то при вычитании. Не вникая, я могу написать вам тысячу такого рода абстрактных предложений во вставками "может быть", "немаловероятно" и т.д. и т.п. Извольте выражаться конкретней, Дмитрий справедливо заметил выше о том, что мы здесь не философией занимаемся и даже не на собседедовании ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 08:51 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Как вы вообще в теме с таким названием умудрились перейти к арифметике?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 08:52 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКак вы вообще в теме с таким названием умудрились перейти к арифметике?)стреляли.. (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 11:22 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
В продолжение тесткейсов... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 11:56 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivзначит, все же не знаешь, потому как 1) это не догма, 2) от разрядности неточность не зависит, в смысле, даже увеличивая разряднрсть точности не достичь, поскольку обусловлена она именно формой представления числа. Все я знаю. И про особенности преобразования дробных чисел в разные системы счисления, и даже преобразовывал неоднократно ручкой в тетради во время учебы. Давай сначала немного ТЗ восстановим. Началось тут 19473119 где я утверждаю что денежные расчеты можно вести в double если не нужно использовать более 15 десятичных разрядов (чуть перефразировал), тут 19475388 ты усомнился в моем заявлении что в FoxPro все числовые переменные double, сходу не смог, а сейчас нагуглил . Магическое число 15 там упоминается, не я его придумал. Я не утверждал что возможна абсолютная точность. Есть погрешность преобразования мантиссы и эта погрешность легко считается как 1/2^52 = 2.22*10^-16 точнее мантисса 53 бита, т.к. первый бит всегда единица и просто подразумевается, а не пишется. 1/2^53 = 1.11*10^-16. Это означает что при переводе 15 значного десятичного числа в double и обратно погрешность никак не помешает, главное вовремя округлять. Не настолько силен в математике чтобы доказывать формулами, поэтому сделал тест перебором преобразования всех 15-тизначных целых чисел в double и обратно. Правда не быстрый он, за 22 минуты дошел только до 100601824280576 и дальше молотит. Конца дожидаться не буду. Пару часов погоняю, отпишусь чем кончилось. исходник Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Запускал в дебаге, чтобы оптимизатор код не упростил, вот с асмом Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. PS Для float погрешность 1/2^24 = 5.96*10^-8. Т.е. точно можно оперировать 7-ю знаками, для денег это маловато, т.к. максимум будет 99999.99 а дальше погрешности вылезут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 13:34 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonПомнится ты заметил что в идентичных сорцах картинки не были численно-точно равны. Даже при том что мы включили одинаковый конгруэнтный ГПСЧ для всех сорцов и ЯП. Мы тогда списали это на погрешность вычислений и забили болт. Не стали детально разбираться. Забили, но было правдоподобное объяснение что в разных ЯП параметры могут читаться в разном порядке, т.е. даже при одинаковой последовательности будут разные результаты. Например f(rand(), rand()). Там были такие подозрительные места в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 13:40 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TЗабили, но было правдоподобное объяснение что в разных ЯП параметры могут читаться в разном порядке, т.е. даже при одинаковой последовательности будут разные результаты. Например f(rand(), rand()). Там были такие подозрительные места в коде. Ну это легко фиксится introduce temp var. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 13:42 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonНу это легко фиксится introduce temp var. ХЗ, оптимизатор превратит это обратно в f(rand(), rand()), а то и еще во что похуже, а ограничивать оптимизатор - порушить всю нашу идею замеров скорости. Потому и забили. Как-то так мне припоминается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 14:00 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TХЗ, оптимизатор превратит это обратно в f(rand(), rand()), серьёзно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 14:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TХЗ, оптимизатор превратит это обратно в f(rand(), rand()), серьёзно? я ж написал ХЗ, т.е. сомневаюсь но возможно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 14:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Изопропилсерьёзно? Вполне: и компилятор и процессор вольны менять порядок независимых (с их точки зрения) операций вплоть до параллельного исполнения. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 14:55 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Кстати задумался... возможно ли написать честную последовательность float/double псевдо случайных величин по линейному закону. Сама плотность значений float/double распределена по вещесвенной оси изначально неравномерно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 15:01 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TНе настолько силен в математике чтобы доказывать формулами, поэтому сделал тест перебором преобразования всех 15-тизначных целых чисел в double и обратно. Правда не быстрый он, за 22 минуты дошел только до 100601824280576 и дальше молотит. Конца дожидаться не буду. Пару часов погоняю, отпишусь чем кончилось. Прошло два часа, досчитало до 103329396948992, считает дальше. Ошибок не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 15:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovИзопропилсерьёзно? Вполне: и компилятор и процессор вольны менять порядок независимых (с их точки зрения) операций вплоть до параллельного исполнения. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. может напечатать 1 0 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 15:14 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Изопропилможет напечатать 1 0 ? Был неправ, признаю: ни вызовы get(), ни rand() оно не перепутает из-за внутренних побочных эффектов, что создаёт их зависимость. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 15:35 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonНу это легко фиксится introduce temp var. Не очень легко. Я исходники глянул и вспомнил почему поверил на слово без проверки. С++ и C# . Код заметно отличается т.к. в C# пришлось отказаться от перегрузки +,- и т.д. из-за того что тормозит она в шарпе. А т.к. rand() много где вызывается, то не стал связываться с проверкой предложенной гипотезы, слишком муторно там все подгонять чтобы порядок соблюсти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 15:46 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonКстати задумался... возможно ли написать честную последовательность float/double псевдо случайных величин по линейному закону. Сама плотность значений float/double распределена по вещесвенной оси изначально неравномерно. А нужна ли она? Если под словом "честная" понимается весь допустимый диапазон, т.е. от 10^-308 до 10^308, то какое возможно практическое применение? Есть реализации работающие в диапазоне 0-1, например в C# Random.NextDouble() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 15:58 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Посмотрел исходники Random.NextDouble() http://referencesource.microsoft.com/#mscorlib/system/random.cs,4c2fc83207c654d1 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Не стал МС с double заморачиваться, последовательность генерится в int`ах, а в double только конвертируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 16:08 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T, интересно, как ты себе представляешь линейный конгруэнтный гпсч в плавучке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 18:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
2SashaMercury, Саша, ты совсем зря все буквы использованного тобой алфавита истратил, от первой до последней. А на будущее , прими в расчет, что когда ты мимоходом предлагаешь кому-то что-то почитать, и тем более, в использованном тобой стиле, то лично то в этот момент у тебя нет сомнения в интерпретации смысла текста. Судя по всему, ты занимаешься преждевременным чтением. Лучше было бы, если бы учил буквы Марсианского алфавита. Предложенное тобой чтение - для старших курсов, только для тех, кто азбуку уже осилил. автор...Не вникая... а вот это ты мощно задвинул. Здесь жирный плюс. Так и продолжай дальше - не вникая . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 18:47 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
В продолжение 19478638 . Прошло 6 часов перебора и пройдено 1% диапазона, до 110106318471168 и продолжает молотить. 600 часов как-то многовато, можно и проц сжечь. Вырубил. Поразмышлял над аргументами о преобразовании. Преобразование 2-10 вообще не проблема, т.к. по-большому счету оно нужно только при выводе, а хранение и расчеты идут в двоичном виде. Т.е. тут все отлично лечится своевременным применением value = round(value, N), где N требуемое число разрядов запятой, используемое при хранении. round() функция не быстрая, но если бы ее реализовали аппаратно в проце, то и юзали бы все double для точных расчетов. У всяких суррогатов типа как money, smallmoney у MSSQL (использование int32 или int64 для хранения и виртуальный сдвиг точки на 4 разряда при выводе) тоже ведь не все идеально, начни там делить и начнутся проблемы. Например в фоксе есть подобный тип currency, пробуем выделить НДС 18% и вот что имеем Код: plaintext 1. 2. 3. и тоже в double Код: plaintext 1. 2. 3. Только мне кажется что во втором случае повыше точность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 19:40 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T, открой тайну - чему равно 997654321054321 / 1.00000000000004 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 20:08 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T, опечатка - 987654321054321 / 1.00000000000004 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 20:10 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima T, открой тайну - чему равно 997 654 321 054 321 / 1.000 000 000 000 04 ? Не открою, т.к. тут попытка оперирования числами общей разрядностью 29 знаков. Бери какую-нибудь мат-либу и считай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 20:15 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima Tпопытка оперирования числами общей разрядностью 29 знаков мне казалось - оба 15-разрядные, да и результат 15-разрядный хочу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 20:19 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima Tпопытка оперирования числами общей разрядностью 29 знаков мне казалось - оба 15-разрядные, да и результат 15-разрядный хочу. Приведи сначала оба числа в единую разрядность, т.е. Код: plaintext Хотеть не вредно, бери мат.либу и реализуй свои хотелки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 20:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TТолько мне кажется что во втором случае повыше точность? Мне кажется это неверная постановка вопроса. Мы не должны искать способа повышать точность. Мы должны очертить класс операций которые позволяют нам работать с double недеструктивно. По поводу присвоений. Твой замечательный цикл который сейчас греет твой кусок кремния и твою комнату имеет мало пользы. Я предлагаю его упростить и взять множество ключевых констант MIN_DOUBLE, MAX_DOUBLE ... etc и различные варианты "бегущего бита" или множества значений десятичной системы таких как 9, 99, 999 e.t.c. И проверить только на них и сделать выводы. По поводу целочисленного деления. Как верно было сказано, точность последней копейки может плавать в зависимости от типа данных. BCD-арифметика даёт бухгалтерское (клеточное) деление. Двоичная целочисленная может дать другой результат. И наш волшебный double-тип может дать еще более парадоксальный результат. Если я ошибся - то прошу поправить. Почему я настойчиво вопрошаю к сообществу. Предлагаю брать за эталон Oracle-NUMBER, или бухгалтерский калькулятор Sharp/Citizen для проверки точности делений. Или любой другой финансовый тип. Частное от деление денег на деньги или денег на целое должно давать в последнем знаке ожидаемый результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 20:28 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TХотеть не вредно а вот double использовать вместо decimal - вредно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 20:31 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TХотеть не вредно а вот double использовать вместо decimal - вредно. Если ты про decimal из C#, то это удел только .net, в других ЯП подобное не замечал. Тут вообще-то форум по С/С++. Соглашусь что decimal один из наилучших велосипедов, 128 бит это 128 бит, но тоже не идеальный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 20:39 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonDima TТолько мне кажется что во втором случае повыше точность? Мне кажется это неверная постановка вопроса. Мы не должны искать способа повышать точность. Мы должны очертить класс операций которые позволяют нам работать с double недеструктивно. Так я и показал тестом что double недеструктивен, т.е. вполне точен. но не надо от него чудес ожидать, типа 19479327 . Если в целочисленных типах происходит переполнение, а в плавающих потеря точности, то это не баг, а фича, которой надо уметь грамотно пользоваться, а не тупо утверждать что double неточен по определению. Но есть минусы double, я их тоже указывал: сравнение, сортировка как следствие, что не дает его полноценно использовать для значений с фиксированной разрядностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 20:51 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли ты про decimal из C#, он там кривой(точность нельзя задать). нормальный в коболе и наследниках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:03 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Если уж про полноценные десятичные типы, то у меня был инцидент. Тип NUMERIC в dbf, реально хранится как строка десятичных цифр. Фокс все отлично посчитал (используя double) но поле было N(10,2), а значение туда не влазило и сохранилось как N(10,1), такая вот баго-фича, строка то читаема, а я огреб по полной от бухгалтерии, которая потеряла пару копеек в десятках миллионов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:09 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Изопропилон там кривой(точность нельзя задать). И это тоже, но и производительность с ним не та. Мне надо было быстрый парсер кучи файлов с кучей цен. Просто перегнать один формат в другой. И double гораздо быстрее чем decimal. Оно и понятно: нативный тип понимаемый процом против самодельной структуры от МС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:21 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TПриведи сначала оба числа в единую разрядность При операциях с числами с плавающей точкой они уже в одной разрядности: 0.987654321054321*10 15 и 0.100000000000004*10 -1 . Мантисы перемножаются отдельно, показатели складываются отдельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:21 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TМне надо было быстрый парсер кучи файлов с кучей цен это скорее обработка текста, а не вычисления ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:25 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDima TПриведи сначала оба числа в единую разрядность При операциях с числами с плавающей точкой они уже в одной разрядности: 0.987654321054321*10 15 и 0.100000000000004*10 -1 . Мантисы перемножаются отдельно, показатели складываются отдельно. Не надо про сферических коней, почитай вступление 19478638 , речь про double как альтернативе расчетам с числами с фиксированной разрядностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:26 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima Tпочитай вступление Если уж читать вступление, так с того места, где кое-кто спутал финансистов с бухгалтерами. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:35 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TМне надо было быстрый парсер кучи файлов с кучей цен это скорее обработка текста, а не вычисления текст 10 во внутренние 2 (double или decimal) потом обратно в текст 10. Это тоже вычисления. И по факту double оказалось быстрее, да и косяки с разрядностью decimal при выводе еще вылезли. Разговор ведь про общее использование, в т.ч. и такое. Это просто частный случай, демонстрирующий что нет идеального решения проблем работы с числами с фиксированной разрядностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:37 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDima Tпочитай вступление Если уж читать вступление, так с того места, где кое-кто спутал финансистов с бухгалтерами. если ты про это 19479458 , то огреб я от главбуха тогда. В остальном тут топик вообще про inline, поэтому остальное читай по диагонали, как субтопики :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:42 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TЭто просто частный случай, демонстрирующий что нет идеального решения проблем работы с числами с фиксированной разрядностью. BINARY FIXED(n,m) DECIMAL FIXED(n,m) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 21:54 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилBINARY FIXED(n,m) DECIMAL FIXED(n,m) Краткость - сестра таланта, но тут непонятно из какой оперы эти понятия. Ссылку бы дал, или еще как-то намекнул о чем речь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 22:01 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T, это PL/1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 22:08 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Челы. Толи от воскресенья... толи от количества выпитого пива туплю. Глянте плиз пред ваши ясны очи. На каждой нечетной итерации мантисса удваивает свое значение. На четной - добавляет единицу. DoubleFormat после некой итерации перестает изменять свое raw-значение. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. Отчотик Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 23:06 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
mayton, это так и задумано? dslow((uint32_t)(du2.iv && 0xFFFFFFFF)); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 05:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Блин... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 08:52 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Выводи в hex, в нем смотреть удобнее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Результат Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 09:37 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Не совсем удобно. Группы битов sign-exponent-mantissa не кратны 4. Граница пересекает 1-hex символ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 10:20 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Сдвигами лечится. PS у тебя еще в double с мантиссой косяк, не 53, а 52 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 10:28 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T Выводи в hex, в нем смотреть удобнее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Результат Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Давно для этого изобрели формат %a http://www.cplusplus.com/reference/cstdio/printf/?kw=printf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 10:38 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TСдвигами лечится. PS у тебя еще в double с мантиссой косяк, не 53, а 52 Ааа точно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 11:06 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Хм... последний бит мантиссы немогу задействовать... Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 11:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Появилась мысль как сделать сравнимым double - округлять по окончанию расчета до необходимого количества знаков, но не более 15-ти, т.е. 14 после запятой. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Результат Код: plaintext 1. 2. 3. т.е. надо сделать тип, который кроме значения содержит точность, например при умножении точности складываются, при делении устанавливается максимально возможная для результата и т.д. Тогда можно проверять на равенство, т.е. это будет полноценный числовой тип. Да и NULL там есть, в смысле NaN. Или как минимальный вариант: просто сделать функцию округления до заданного количества десятичных знаков и функцию сравнения, которая при проверке равенства округлит очень близкие значения. Другой вопрос как затестить, 10^15 уже многовато для перебора, а тут еще варианты с разным количеством знаков после точки 14.1, 13.2, 12.3 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 14:25 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T, ну скажи пожалуйста зачем нужен такой тип данных который нужно округлять после каждой операции с ним? А как просядет нагрузка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 14:29 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonDima T, ну скажи пожалуйста зачем нужен такой тип данных который нужно округлять после каждой операции с ним? А как просядет нагрузка? Тоже об этом думаю. Надо округления сводить к минимуму, т.е. в конце расчета например. Фиг с ним с округлением, тормоза при сравнении важнее, а они тоже есть. Тема не философская, мне надо для C# определиться в чем деньги хранить. Есть быстрый и компактный double и есть тормозной и неудобный decimal (хитрая 128 битная структура) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 14:47 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TТоже об этом думаю. Надо округления сводить к минимуму, т.е. в конце расчета например. Фиг с ним с округлением, тормоза при сравнении важнее, а они тоже есть. Я-бы не занимался округлением. А просто очертил-бы безопасные операции (присвоение целого). И проверил-бы какие еще можно назвать такими. Тема не философская, мне надо для C# определиться в чем деньги хранить. Есть быстрый и компактный double и есть тормозной и неудобный decimal (хитрая 128 битная структура) Да и нечего думать. Ясен пень храни все в decimal. Деньги важны и копейку терять нельзя. А вот если тебе надо создать OLAP-кубики и быстро гонять по ним аналитику то здесь double подходит идеально. Может даже и float -бы подошел. Датамайнинг там... принятие решений. Туда-же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 15:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T(хитрая 128 битная структура) что там хитрого? The binary representation of a Decimal number consists of a 1-bit sign, a 96-bit integer number, and a scaling factor used to divide the integer number and specify what portion of it is a decimal fraction. The scaling factor is implicitly the number 10, raised to an exponent ranging from 0 to 28. The return value is a four-element array of 32-bit signed integers. The first, second, and third elements of the returned array contain the low, middle, and high 32 bits of the 96-bit integer number. The fourth element of the returned array contains the scale factor and sign. It consists of the following parts: Bits 0 to 15, the lower word, are unused and must be zero. Bits 16 to 23 must contain an exponent between 0 and 28, which indicates the power of 10 to divide the integer number. Bits 24 to 30 are unused and must be zero. Bit 31 contains the sign: 0 mean positive, and 1 means negative. Note that the bit representation differentiates between negative and positive zero. These values are treated as being equal in all operations. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 15:32 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TПоявилась мысль как сделать сравнимым double - округлять по окончанию расчета до необходимого количества знаков, но не более 15-ти, т.е. 14 после запятой. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Результат Код: plaintext 1. 2. 3. т.е. надо сделать тип, который кроме значения содержит точность, например при умножении точности складываются, при делении устанавливается максимально возможная для результата и т.д. Тогда можно проверять на равенство, т.е. это будет полноценный числовой тип. Да и NULL там есть, в смысле NaN. Или как минимальный вариант: просто сделать функцию округления до заданного количества десятичных знаков и функцию сравнения, которая при проверке равенства округлит очень близкие значения. Другой вопрос как затестить, 10^15 уже многовато для перебора, а тут еще варианты с разным количеством знаков после точки 14.1, 13.2, 12.3 и т.д. :) у меня на Delphi еще в 99-м году была написана библиотека, с чудными функциями round2(), round100() фактически да, так и было, любые попытки вычислить sum := round2(price * amount); причем round2 был написан очень хитро, с замглавбуха делали отдельное регрессионное тестирование, перебрав практически все числа. просто чтоб копейки сходились. и все равно пришлось прикручивать еще и финальную коррекцию на сумму счета. в общем трах был незабываемый. что-то вроде этого Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 16:05 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonДа и нечего думать. Ясен пень храни все в decimal. Деньги важны и копейку терять нельзя. Копейки все равно теряются - как ни крути. Округления никто не отменял т.к. учет идет с точностью до копейки. Есть дробные количества, разные методики расчета НДС и т.д. и т.п. Недавно прочитал что оказывается есть даже специальное банковское округление : округление происходит к ближайшему чётному, то есть 2,5 => 2, 3,5 => 4. Наверно в банках при регулярном начислении процентов эти копейки выливаются в круглую сумму. C double проблемы видятся именно в сравнении, т.к. даже при больше/меньше есть проблемы. Например "цена < 100", а она записана с погрешностью как 99.99999999999 и все, попадет в выборку. Хотя можно написать "цена < 99.9999" но это ж помнить постоянно надо. ХЗ почему MS похоронил тип money (64-битное целое со сдвигом на 4 разряда при выводе) и придумал этот decimal в C#. Int64 гораздо быстрее чем структура обрабатывается, т.к. нативный он для процов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 16:27 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TХЗ почему MS похоронил тип money (64-битное целое со сдвигом на 4 разряда при выводе) и придумал этот decimal в C#. чтоб NUMERIC(n,m) от SQL сервера получить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 16:46 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonДа и нечего думать. Ясен пень храни все в decimal. Деньги важны и копейку терять нельзя. Копейки все равно теряются - как ни крути. вопрос не в том, что они теряются. вопрос в том, что они должны теряться правильно. что еще больше усугубляется тем, что калькуляторы используют именно decimal float ну и базы данных - тоже все числа считают как decimal соответственно, во избежание расхождений на эти самые копейки - нужно везде использовать тот-же decimal а money выпилили из-за невместительности, плюс он не бросает исключение на переполнении. плюс у него есть существенный косяк - он операцию умножения дробных до округления делает не совсем верно. плюс цены и количества могут иметь более 4-х знаков после запятой. короче тип не годный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 16:51 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima T, банковское округление - почти случайный термин, оно настолько же банковское, насколько голландское, Гауссово или статистическое. К счету денег именно как денег - непосредственного отношения не имеет . Просто в IEEE 754 именно оно оказалось рекомендованным способом округления по умолчанию. Потому библиотечные коды от Microsoft предпочитают его. И да, в силу своих статистических свойств (оно дает несмещенную оценку среднего) удобнее при вычислении баланса в тысячах . Про деньги - другая история. И округление у денег - с приседом. (Fixed point ариметика обладает "хорошими" свойствами по сложению, но на умножении приезжают почти все те же истории.) Пусть некий процесс счетом суммы по левой стороне дает 12.345, а по правой - 12.34499999999999999999999999 Это - одно и то же число. Только обычный "честный" Round(,2) для одного из них даст 12.35, а для другого - 12.34 При округлении в деньгах важно, чтобы в позиции, используемой для решения о том, куда округлять ( в данном случае в третьей) стояла точная цифра. Этого можно добиться, только если предварительно провести округление до позиции дальше третьей. + исторически существовали (может и сейчас есть) деньги с тремя знаками после запятой. Поэтому в денежном типе у Microsoft заявлено 4 знака. Процедура приведения к этому типу гарантирует Round(,5) и все получившиеся 4 знака - точные. Теперь, наконец, уже в рамках этого типа, Round(,2) правомерен и дает правильный результат. Т.е. если ты хочешь писать свой денежный тип, ты, так или иначе, должен повторить для него технику двойного округления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 17:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Склоняюсь к мысли вести учет в копейках. int32 для цен, int64 для сумм. Как вариант может не экономить и int64 для цен тоже. Есть нагрузка из-за форматирования на входе-выходе, но тут надо потестить. У меня самодельные ToString()/FromString(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 19:50 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
42 949 672 рублей 95 копеек в int? Хватит-ли. Кроме того ограничения могут стрельнуть в другом месте например если будет расчет арифметического среднего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 20:33 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
mayton42 949 672 рублей 95 копеек в int? Хватит-ли. Кроме того ограничения могут стрельнуть в другом месте например если будет расчет арифметического среднего. В моем случае хватит, для цен сейчас хватает smallmoney в MSSQL т.е. максимум 214'748,3648 р., другое дело посчитать sum(price * kol) по большому количеству документов. Переход на копейки даст предел 21'474'836,48 что тоже немного, а int64 даст предел 92'233'720'368'547'758.08 что есть дофига. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 20:59 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaDima TПоявилась мысль как сделать сравнимым double - округлять по окончанию расчета до необходимого количества знаков, но не более 15-ти, т.е. 14 после запятой. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Результат Код: plaintext 1. 2. 3. т.е. надо сделать тип, который кроме значения содержит точность, например при умножении точности складываются, при делении устанавливается максимально возможная для результата и т.д. Тогда можно проверять на равенство, т.е. это будет полноценный числовой тип. Да и NULL там есть, в смысле NaN. Или как минимальный вариант: просто сделать функцию округления до заданного количества десятичных знаков и функцию сравнения, которая при проверке равенства округлит очень близкие значения. Другой вопрос как затестить, 10^15 уже многовато для перебора, а тут еще варианты с разным количеством знаков после точки 14.1, 13.2, 12.3 и т.д. :) у меня на Delphi еще в 99-м году была написана библиотека, с чудными функциями round2(), round100() фактически да, так и было, любые попытки вычислить sum := round2(price * amount); причем round2 был написан очень хитро, с замглавбуха делали отдельное регрессионное тестирование, перебрав практически все числа. просто чтоб копейки сходились. и все равно пришлось прикручивать еще и финальную коррекцию на сумму счета. в общем трах был незабываемый. что-то вроде этого Код: pascal 1. 2. 3. 4. 5. 6. В Delphi нет функций ceil и floor? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 01:51 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TСклоняюсь к мысли вести учет в копейках. int32 для цен, int64 для сумм. Как вариант может не экономить и int64 для цен тоже. Есть нагрузка из-за форматирования на входе-выходе, но тут надо потестить. У меня самодельные ToString()/FromString(). цена может быть в сотых, и даже миллионных долях копеек, запросто. классический случай - это счет фактура на ранее произведенную предоплату. цена вычисляется там обратным путем - делится общая сумма на общее количество ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 10:52 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
SashaMercurynojavaпропущено... :) у меня на Delphi еще в 99-м году была написана библиотека, с чудными функциями round2(), round100() фактически да, так и было, любые попытки вычислить sum := round2(price * amount); причем round2 был написан очень хитро, с замглавбуха делали отдельное регрессионное тестирование, перебрав практически все числа. просто чтоб копейки сходились. и все равно пришлось прикручивать еще и финальную коррекцию на сумму счета. в общем трах был незабываемый. что-то вроде этого Код: pascal 1. 2. 3. 4. 5. 6. В Delphi нет функций ceil и floor? есть, а толку, они считают "неверно" http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Math.Floor http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Math.Ceil бухгалтерам нужно строго half round up округление ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 10:58 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Различные виды округления в Java (BigDecimal) BigDecimalHALF_UPHALF_DOWNHALF_EVENFLOORCEILING10.00110.0010.0010.0010.0010.0110.00210.0010.0010.0010.0010.0110.00310.0010.0010.0010.0010.0110.00410.0010.0010.0010.0010.0110.00510.0110.0010.0010.0010.0110.00610.0110.0110.0110.0010.0110.00710.0110.0110.0110.0010.0110.00810.0110.0110.0110.0010.0110.00910.0110.0110.0110.0010.0110.01010.0110.0110.0110.0110.0110.01110.0110.0110.0110.0110.0210.01210.0110.0110.0110.0110.0210.01310.0110.0110.0110.0110.0210.01410.0110.0110.0110.0110.0210.01510.0210.0110.0210.0110.0210.01610.0210.0210.0210.0110.0210.01710.0210.0210.0210.0110.0210.01810.0210.0210.0210.0110.0210.01910.0210.0210.0210.0110.0210.02010.0210.0210.0210.0210.02 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 11:32 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 11:33 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaцена может быть в сотых, и даже миллионных долях копеек, запросто. классический случай - это счет фактура на ранее произведенную предоплату. цена вычисляется там обратным путем - делится общая сумма на общее количество Вообще-то для этого придуман счет на оплату где изначально цена и количество прописываются. Так что это не классический случай, а обычный бардак. Но можно и по другому подогнать сумму. Несколькими ценами. Например сумма 3 коп, отгрузили 2 шт. Пишем 1 шт * 1 коп + 1 шт. * 2 коп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 11:50 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima Tnojavaцена может быть в сотых, и даже миллионных долях копеек, запросто. классический случай - это счет фактура на ранее произведенную предоплату. цена вычисляется там обратным путем - делится общая сумма на общее количество Вообще-то для этого придуман счет на оплату где изначально цена и количество прописываются. Так что это не классический случай, а обычный бардак. Но можно и по другому подогнать сумму. Несколькими ценами. Например сумма 3 коп, отгрузили 2 шт. Пишем 1 шт * 1 коп + 1 шт. * 2 коп. тоже мне теоретик. этот счет на оплату могут оплатить и частично, и разными частями, или вообще заплатить больше, чем было выставлено. бардак не бардак, а реалии жизни - и всем плевать на твои представления о порядке, ты должен отразить в базе данных свершившившуюся бизнес-операцию, а не теоретизировать. а вот насчет можно - можно сходить в кабинет главбуху, там тебе популярно пояснят, что можно, а что нельзя :) с занесением в переменную часть ЗП. или вынесением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 12:49 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaбардак не бардак, а реалии жизни У меня другие реалии, такого бардака нет и не ожидается. А насчет "главбух объяснит" - сочувствую тебе и тем кто этот товар будет приходовать и учитывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 13:17 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TУ меня другие реалии, такого бардака нет и не ожидается. теоретик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 14:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Изопропилтеоретик Не, практик, успешный убалтыватель главбухов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 14:48 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TИзопропилтеоретик Не, практик, успешный убалтыватель главбухов который в своём уютном гнёздышке не знает, что такое суммовая разница,недопоставка, частичная отгрузка, пересорт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 15:51 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima Tпропущено... Не, практик, успешный убалтыватель главбухов который в своём уютном гнёздышке не знает, что такое суммовая разница,недопоставка, частичная отгрузка, пересорт Это решаемые проблемы: допоставка, переделка документов, возврат. Про суммовую разницу не понял о чем речь. Ты удивишься, но я даже знаю о такой багофиче ПБУ как учет НДС на сумму в опте и на штуку в рознице, видел 3 типа кульбитов свести арифметику в счет-фактуре. Про дробление упаковок знаю, когда надо продать 1/3 упаковки ценой 30 р и чтобы вышло в чеке ровно 10 р. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 16:03 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вы щас спорите не об округлении а о ролях и отвественностях на проекте. Это офтопик. Давайте не будем. Каждый из вас по своему прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 16:50 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonВы щас спорите не об округлении а о ролях и отвественностях на проекте. Это офтопик. Давайте не будем. Каждый из вас по своему прав. Опередил. Можно закончу и больше не буду. Суть проблемы с копейками в том что никак законодательно не урегулированы правила округления (да и расчета тоже) в обязательных документах. В законодательстве такая мелочь просто не упоминается, а всякие разъяснения по этому поводу от контролирующих органов могут быть проигнорированы судом. Например есть законодательное ограничение наценки на конкретный товар 20%. Купил за 12,34 р наценил 20% получил 14.808. Сделав цену 14.81 можешь запросто попасть под раздачу т.к. 14.808 < 14.81. Тут хотя бы боле-мене очевидно. Сложнее если какому-нибудь "главбуху"-перестраховщику шибанет в голову и он прикажет - сделай так чтобы сумма с НДС была равна сумме колонки и сумме без НДС * ставку (предположим что все товары по одной ставке). Вот вам на ровном месте 4 знака после запятой в сумме НДС по строке. Только копейки все-равно вылезут, пусть в конкретном документе все идеально, т.к. итого с ндс все равно округлять надо, т.к. ни один банк не проведет платеж на 100.1234 р. А в итоге эти округления родят расхождение в отчете по НДС за период, где будет сумма без НДС * ставку НДС != сумма НДС. Поэтому два пути решения проблемы: 1. тупо сказать "есть" пойти расширять разрядность после запятой, создавая проблемы стороне которая эти документы будет приходовать. 2. убедить что это не поможет, и поискать совместно устраивающее всех решение. Не зря пишут в умных книжках что ИТ должны подчиняться непосредственно высшему руководству предприятия, а не зависеть о каких-то отделов предприятия. Главбух не должен быть выше начальника ИТ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2016, 17:36 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Прошу прощения коллеги. На меня нахлынули размышления. Не знаю совсем-ли это по сабж. Смотрел вторую часть научно популярного видео о масштабах вселенной. Впечатлило. Задумался о измеряемых величинах. [spoiler] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 00:00 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonПрошу прощения коллеги. На меня нахлынули размышления. Не знаю совсем-ли это по сабж. Смотрел вторую часть научно популярного видео о масштабах вселенной. Впечатлило. Задумался о измеряемых величинах. [spoiler] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 00:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинКогда вся известная вселенная это от 10^-16 метра до 10^24 метра, т.е. всего 40 десятичных порядков. Ну не совсем. Размер вселенной оценивается в 46 млрд световых лет == 43e25 м Минимальный размер которым может оперировать физика на данный момент, планковский - 1.5e-35 м Т.е. порядков 70. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 00:34 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyТ.е. порядков 70. Упс, рука дрогнула - 60 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 00:36 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 01:26 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Соотношение диаметра обозримой вселенной 10^24 к размеру нейтрино 10^-24 будет равно 10^48. Это больше чем диапазон float (32bit). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 01:29 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВася УткинКогда вся известная вселенная это от 10^-16 метра до 10^24 метра, т.е. всего 40 десятичных порядков. Ну не совсем. Размер вселенной оценивается в 46 млрд световых лет == 43e 25 м Минимальный размер которым может оперировать физика на данный момент, планковский - 1.5e -35 м Т.е. порядков 70. Anatoly MoskovskyAnatoly MoskovskyТ.е. порядков 70. Упс, рука дрогнула - 60 Но даже так от 10^-35 до 10^26 вписывается в экспоненту в 8-bit из float от 10^-38 до 10^38. Чего им в double экспоненту захотелось в 8 раз увеличивать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 01:36 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Я еще дальше покрутил флеш-ролик. Ну вобщем на уровне размеров 10^-35 м. физики различают такие вещи как планковская длина, кварковая пена e.t.c. Поскольку я не физик то не знаю как часто они меряют или сравнивают эти величины. Включать ли такое измерение в нашу оценку или нет - ХЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 10:49 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинAnatoly Moskovskyпропущено... Ну не совсем. Размер вселенной оценивается в 46 млрд световых лет == 43e 25 м Минимальный размер которым может оперировать физика на данный момент, планковский - 1.5e -35 м Т.е. порядков 70. Anatoly Moskovskyпропущено... Упс, рука дрогнула - 60 Но даже так от 10^-35 до 10^26 вписывается в экспоненту в 8-bit из float от 10^-38 до 10^38. Чего им в double экспоненту захотелось в 8 раз увеличивать... ой да ладно, вон в ipv6 не особо парясь вписали 128 бит на адрес, что достаточно для адресации каждого кубического миллиметра во Вселенной. на кой? и они как-то же обосновали свое "решение" мир ит захватили шарлатаны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 12:17 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojava не особо парясь вписали 128 бит на адрес, что достаточно для адресации каждого кубического миллиметра во Вселенной. на кой? и они как-то же обосновали свое "решение" мир ит захватили шарлатаны Меня тоже очень сильно удивило подобное расточительство. Казалось-бы увеличь сетку с 32 бит до 64 и получай себе избыточную разрядность для всех устройств планеты Земля. А там когда полетим в космос или султан сдохнет или протокол. Но КМК Ipv6 будет не очень хорошо распределять сетки и диапазоны. Или большая часть разрядности будет бездарно профукана в угоду бюрократизму и нежеланию думать о том как грамотно распределять. Тема интересная (особенно для сетевиков-сисадминов) и я-бы даже поднял отдельный топик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 14:55 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonМеня тоже очень сильно удивило подобное расточительство. Казалось-бы увеличь сетку с 32 бит до 64 и получай себе избыточную разрядность для всех устройств планеты Земля. А там когда полетим в космос или султан сдохнет или протокол.Но КМК Ipv6 будет не очень хорошо распределять сетки и диапазоны. Или большая часть разрядности будет бездарно профукана в угоду бюрократизму и нежеланию думать о том как грамотно распределять. Да все там продумано. 64 бита отведено на автоматическую генерацию адреса (например из физического адреса), а остальные 64 - это и есть расширение адресного пространства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:02 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вот для Китая к примеру распределение блоков: https://www.countryipblocks.net/ipv6_cidr.php Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Если "/35" это маска ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:09 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonВот для Китая к примеру распределение блоков: Подумаешь, 16 млрд адресов назначили. Зато с гарантией. Ведь на каждый из адресов можно подключить практически неограниченное кол. отдельно адресуемых устройств. Думаю, Китаю хватит надолго )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:16 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Я надеюсь года через 2-3 хватятся и внедрят нормальный Ivp5 с умеренным адресом. Хотя-бы из соображений экономии. Так ведь каждое маршрутизирующее устройство и каждый хост неизбежно у себя резервирует какие-то кеши и временные хранилища для этих 128 бит. А про файрволы и логи событий... да там вообще мрак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:21 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Вообще это войдет в историю как самый эпичный инженерный просчет. Ну все равно что Вавилонская башня... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:23 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonВообще это войдет в историю как самый эпичный инженерный просчет . Ну все равно что Вавилонская башня... ну наш Анатолей с тобой категорически не согласен, по его глубокоуважаемому .... мнению - там как раз все продумано. а так да - это эпический просчет. очень мощный. подобное раздолбайство с увеличением нужных байт привело к тому, что 90% текущего установленного оборудования маршрутизации в принципе не может уместить в своей оперативке новые таблицы маршрутизации (там еще и старые нужно хранить, которые тоже усложняются постоянно). а это сотни миллиардов долларов на переоборудовние только магистралей есть мнение, что подобное "новвовведение" лоббировали циски и прочие аллиед телесины, просто чтоб запустить новый раунд продажи оборудования за деньги. на что провайдеры и операторы отреагировали очень просто - да просто забили болт на IPv6, типо когданибудь потом обновим железо, как помрет текущее от старости (а это с десяток лет минимум). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:32 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
mayton Я надеюсь года через 2-3 хватятся и внедрят нормальный Ivp5 с умеренным адресом. Хотя-бы из соображений экономии. Так ведь каждое маршрутизирующее устройство и каждый хост неизбежно у себя резервирует какие-то кеши и временные хранилища для этих 128 бит. Маршрутизируются только 64 бита. Структура этих 64 бит гораздо проще чем 32 в IPv4. Размер пакета меньше. Формат пакета специально оптимизирован для маршрутизаторов. Т.е. в IPv6 требования к маршрутизаторам снижены. Поэтому ничего лучше вы не придумаете. Единственная проблема IPv6 что он полностью создан с нуля. И весь код работавший с IPv4 не годится для него. Надо не только с нуля писать поддержку протокола, но и поддерживать одновременно обе версии. Поэтому вендоры чей бизнес не зависит от Ipv6 забили на него, потому что инвестируют в прибыль а не в прикольные новинки. А вовсе не потому что 128 бит слишком много )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:46 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyИ весь код работавший с IPv4 не годится для него. Надо не только с нуля писать поддержку протокола, но и поддерживать одновременно обе версии. это не страшно. беда в том, что туча провайдеров и маршрутизаторов у конечных пользователей понятия не имеют о v6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:51 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилAnatoly MoskovskyИ весь код работавший с IPv4 не годится для него. Надо не только с нуля писать поддержку протокола, но и поддерживать одновременно обе версии. это не страшно. беда в том, что туча провайдеров и маршрутизаторов у конечных пользователей понятия не имеют о v6 ситуация хуже, чем можно представить - они и не собираются что-то понимать, судя по тому, что продают в части SOHO раутеров. т.е. от текущего момента на ближайшие лет 6 никакого IPv6 в массах не будет, все так и будут сидеть за NATом что в принципе и объяснимо, 99% пользователей и даром не нужно работать с реальным/выделенным IP, UDP hole вполне достаточно для P2P, а 32 бита IPv4 range, помноженные на 65к port range дают в принципе не ограниченные возможности адресации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:57 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Изопропилбеда в том, что туча провайдеров и маршрутизаторов у конечных пользователей понятия не имеют о v6 Это не проблема протокола. Это происходит не потому что он неудачный, как тут профи пытаются втирать ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 15:58 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyИзопропилбеда в том, что туча провайдеров и маршрутизаторов у конечных пользователей понятия не имеют о v6 Это не проблема протокола. Это происходит не потому что он неудачный, как тут профи пытаются втирать ))) с практической точки зрения он неудачный, потому что обратно несовместимый. пример удачности - это UTF-8, ибо придуман гениями. революции при миллиардах денег и единиц оборудоования внедрений уже не работают, только эволюционный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:03 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕдинственная проблема IPv6 что он полностью создан с нуля. И весь код работавший с IPv4 не годится для него. Надо не только с нуля писать поддержку протокола, но и поддерживать одновременно обе версии. Поэтому вендоры чей бизнес не зависит от Ipv6 забили на него, потому что инвестируют в прибыль а не в прикольные новинки. А вовсе не потому что 128 бит слишком много )) Я с вами согласен. Мы можем просто разойтись в цифрах. Вы считаете что вендоры и частный бизнес забили на него а я знаю что Internet of things развивается и ни я ни вы не можем посчитать сколько этим "вещам" нужно будет адресного пространства черз 2,4,8 лет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:07 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonAnatoly MoskovskyЕдинственная проблема IPv6 что он полностью создан с нуля. И весь код работавший с IPv4 не годится для него. Надо не только с нуля писать поддержку протокола, но и поддерживать одновременно обе версии. Поэтому вендоры чей бизнес не зависит от Ipv6 забили на него, потому что инвестируют в прибыль а не в прикольные новинки. А вовсе не потому что 128 бит слишком много )) Я с вами согласен. Мы можем просто разойтись в цифрах. Вы считаете что вендоры и частный бизнес забили на него а я знаю что Internet of things развивается и ни я ни вы не можем посчитать сколько этим "вещам" нужно будет адресного пространства черз 2,4,8 лет. твоему холодильнику не нужен выделенный IP, тебя обманули :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:08 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaтвоему холодильнику не нужен выделенный IP, тебя обманули :) У меня тоже скепсис по поводу холодильника. Но для того чтобы коммуницировать умные часы, планшет, ТВ-панель - все равно нужна какая-то адресация. И это не NAT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaтвоему холодильнику не нужен выделенный IP, тебя обманули :) да, достаточно динамического и за NAT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:12 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
mayton Internet of things развивается и ни я ни вы не можем посчитать сколько этим "вещам" нужно будет адресного пространства черз 2,4,8 лет. Вот когда инвесторы это посчитают - тогда и внедрят )) По факту у конечных юзеров уже есть полная поддержка IPv6. Осталось чтобы их ISP нашли в этом выгоду и вложились в апгрейд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:14 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonУ меня тоже скепсис по поводу холодильника. А я бы не отказался знать что есть в холодильнике стоя у полки в магазине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:15 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymayton Internet of things развивается и ни я ни вы не можем посчитать сколько этим "вещам" нужно будет адресного пространства черз 2,4,8 лет. Вот когда инвесторы это посчитают - тогда и внедрят )) По факту у конечных юзеров уже есть полная поддержка IPv6. Осталось чтобы их ISP нашли в этом выгоду и вложились в апгрейд. по какому еще такому факту, господи? если IPv6 стоит в винде, и он даже не выключен - это вовсе не значит, что WiFi SOHO раутер у пользователя в принципе понимает IPv6. Скорее всего не понимает вообще (привет длинк). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:26 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonУ меня тоже скепсис по поводу холодильника. А я бы не отказался знать что есть в холодильнике стоя у полки в магазине. для этого есть жена и OneNote/Evernote, которые синхронизируются с холодильником в режиме "купить сегодня". достаточно завести список продуктов, которые обычно покупаются (не более 200), и отмечать крыжиком - пустые крыжики - купить, зачеканные - покупать сегодня не надо. жена тебе отмечает что купить, ты покупаешь - и сразу отмечаешь "куплено", как только забрасываешь в корзинку. internet of things, да да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:29 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaэто вовсе не значит, что WiFi SOHO раутер у пользователя в принципе понимает IPv6. Скорее всего не понимает вообще (привет длинк). и провайдеры с хостингами впридачу. в принтерах и камерах - далеко не всегда ipv6 есть так что остаётся локальная сетка, а в ней - 10.0.0.0 ( кому недостаточно - вполне могут внутри себя держать всё оборудование с поддержкой v6) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:43 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Изопропилnojavaэто вовсе не значит, что WiFi SOHO раутер у пользователя в принципе понимает IPv6. Скорее всего не понимает вообще (привет длинк). и провайдеры с хостингами впридачу. в принтерах и камерах - далеко не всегда ipv6 есть так что остаётся локальная сетка, а в ней - 10.0.0.0 ( кому недостаточно - вполне могут внутри себя держать всё оборудование с поддержкой v6) для локальной домашней сетки вполне достаточно 192.168.1.0/24 в 99% случаев даже на /24 еще 95% свободных адресов болтается. у особо упоротых (вроде меня) всего навсего 48- fake IP ников в статике, ну и гостевых 16 (их них максимум заюзанных одновременно - 7). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:49 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaжена тебе отмечает что купить, ты покупаешь - и сразу отмечаешь "куплено", как только забрасываешь в корзинку. Зачем жену напрягать тупой работой, и самому напрягаться, если с ней "умный" холодильник может справиться? Забил один раз список продуктов обязательного наличия, в магазине кнопку нажал и получил список того что там закончилось и что есть. Как-то так я себе представляю "умный" холодильник. Если введут маркировку продуктов какими-нибудь метками машиночитаемыми, то вполне реально такое реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:51 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonnojavaтвоему холодильнику не нужен выделенный IP, тебя обманули :) У меня тоже скепсис по поводу холодильника. Но для того чтобы коммуницировать умные часы, планшет, ТВ-панель - все равно нужна какая-то адресация. И это не NAT. и? даже в самом безумном сценарии - они все могут коммуницировать строго внутри своей фейковой LAN сетки. а часы твои на руке - могут ходить к тебе домой методов UDP hole, да хоть бы по торрент протоколу. реальный IP вам там не нужен вообще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 16:59 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Модератор: Личные вопросы давайте отложим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 17:07 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaреальный IP вам там не нужен вообще Я сам часто думаю над этим вопросом. Возможно проблемы Ipv4 адресации и не существует. Благо уровней виртуализации над Ipv4 - полная коробочка. Но мне хотелось-бы обходится без Nat, VPN, Тунелей, Проксей разных левлов, и прочих торов с торентами. Есть sourceIp на планете Земля и destIp + port на планете Марс. And I will be happy... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 17:18 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonnojavaреальный IP вам там не нужен вообще Я сам часто думаю над этим вопросом. Возможно проблемы Ipv4 адресации и не существует. Благо уровней виртуализации над Ipv4 - полная коробочка. Но мне хотелось-бы обходится без Nat, VPN, Тунелей, Проксей разных левлов, и прочих торов с торентами. Есть sourceIp на планете Земля и destIp + port на планете Марс. And I will be happy... ты забываешь, что NAT выполняет благостную и весьма востребованную функцию - включает хотя бы минимальный firewall. мне бы вот точно не хотелось, чтобы холодильник соседа свободно коммуницировал с планшетом жены. а если позволить всем пинговать всех, то никто firewall ставить не будет - лень, лишнее движение. в текущей ситуации мне кажется что IPv4 будет с нами еще не один десяток лет. хостинги сильно подвинутся (вон даже для всего фейсбука достаточно всего одного IP), пользователи всегда поприжмутся со своим неоправданным "требованием" реального IP (такое нужно только гикам, обычным людям до лампочки совершенно). а на магистральном уровне всегда возможно туннелирование и инкапсулирование (что сейчас происходит уже). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 17:46 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Ну а какие недостатки у Nat. Я навскидку щас пытаюсь вспомнить и припомнил только одно. За Nat невозможно поднять два листенера на 80 порту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 17:59 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВот когда инвесторы это посчитают - тогда и внедрят )) +1 Точнее когда появится какой-то ширпотребный софт/технология удобнее работающая по IPv6, чем с костылями над IPv4. ИМХУ главный плюс IPv6 в "белых" IP, т.е. в возможности установить соединение между любыми поинтами сети. Но намеков на такую потребность не видно на горизонте. На горизонте пока обратное, "облака", а тут нет проблем с IPv4, т.к. "белые" IP надо только серверам, а количество НАТов, за которыми сидит клиент, проблем не создает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 18:11 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonНу а какие недостатки у Nat. Я навскидку щас пытаюсь вспомнить и припомнил только одно. За Nat невозможно поднять два листенера на 80 порту. эта задача вполне по плечу реверспрокси на маршрутизаторе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 18:14 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
maytonЗа Nat невозможно поднять два листенера на 80 порту.Для этого (уже давно) придуман name based vhost и reverse proxy . И придумано всё это не потому, что NAT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:03 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Изопропил, Basil A. Sidorov, то что вы предлагаете это перемешивание уровня приложения и транспорта, на уровне только транспорта задача нерешаема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:11 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima Tто что вы предлагаете это перемешивание уровня приложения и транспорта Сколько уровней в семиуровневой модели взаимодействия открытых систем ISO? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:15 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima Tто что вы предлагаете это перемешивание уровня приложения и транспорта Сколько уровней в семиуровневой модели взаимодействия открытых систем ISO? Тест на дебилизм решил устроить? Давай двумя уровнями обойдемся: транспорт и приложение. http это уровень приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:19 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TИзопропил, Basil A. Sidorov, то что вы предлагаете это перемешивание уровня приложения и транспорта, на уровне только транспорта задача нерешаема.Если не впихивать в транспорт невпихумемое, то мухи начинают отделяться от котлет. Реверс-прокси решают не только дурацкую задачу "повесить два приложения на один порт на одном интерфейсе" и нужен даже тогда, когда у вас вообще нет NAT-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:24 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima Thttp это уровень приложения.HTTP это транспортный протокол. Что, собственно и закодировано в его аббревиатуре. Уровень приложения - обработчики методов HTTP-запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:26 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovDima Thttp это уровень приложения.HTTP это транспортный протокол. Что, собственно и закодировано в его аббревиатуре. Уровень приложения - обработчики методов HTTP-запросов. Хорошо. На порту 80 не обязан висеть web-сервер. Пусть даже он там висит, возьмем порт 12345, где висит самопальный сервис с собственным протоколом обмена, где никак не упомянуто к кому обращение... В общем я к тому что reverse proxy это один из костылей IPv4, он работает, его используют, но это фундаментальное нарушение модели OSI, где заявлено независимость уровней друг от друга. Вобщем грязный хак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:37 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima Tно это фундаментальное нарушение модели OS ICMP является первым "нарушителем" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:39 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TВ общем я к тому что reverse proxy это один из костылей IPv4Есть ложь, наглая ложь и добросовестное заблуждение. Во-первых: реверс-прокси - специфика, обусловленная чётким синтаксисом HTTP-запросов, позволяющим не лезть в семантику. Во-вторых: реверс-прокси не является спецификой IPv4. Он (прокси) вообще не зависит от того, поверх чего работает HTTP: сделаете HTTP-over-serial - и там ему найдётся (полезное) применение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:44 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovсделаете HTTP-over-serial пример искуственный, в вот поверх доменых сокетов/именованых каналов - к реальности ближе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:47 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Изопропилповерх доменых сокетов/именованых каналов - к реальности ближеГораздо ближе - IPv6, поскольку причина использования "именованных" виртуальных хостов и обратных прокси никак не связана с дефицитом адресов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 20:51 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima Tно это фундаментальное нарушение модели OSI, где заявлено независимость уровней друг от друга практика - критерий истины, оставьте комитетчиков в покое, они за свою писанину зарплату получают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 21:00 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЕсть ложь, наглая ложь и добросовестное заблуждение. "Статистика" никак не упомянута, а просится. ИМХУ всем просто фиолетово на уровни OSI и вообще на философию OSI, поэтому транспорт смотрит во внутря чего доставляет, что изначально было табу в теории OSI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 21:02 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TИМХУ всем просто фиолетово на уровни OSI и вообще на философию OSI, поэтому транспорт смотрит во внутря чего доставляет, что изначально было табу в теории OSI.То, что OSI-модель проиграла IP-модели никак не отменяет того факта, что HTTP - транспортный протокол с чётким синтаксисом, который позволяет ограничиться разбором (только) структурированных заголовков для "всяческой магии". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 21:05 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovDima TИМХУ всем просто фиолетово на уровни OSI и вообще на философию OSI, поэтому транспорт смотрит во внутря чего доставляет, что изначально было табу в теории OSI.То, что OSI-модель проиграла IP-модели никак не отменяет того факта, что HTTP - транспортный протокол с чётким синтаксисом, который позволяет ограничиться разбором (только) структурированных заголовков для "всяческой магии". Полностью согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 21:13 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima Tчересчур умные теоретики, слишком сложно придумали они не сложно придумали - жизнь разнообразнее оказалась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 21:18 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima Tчересчур умные теоретики, слишком сложно придумали они не сложно придумали - жизнь разнообразнее оказалась. Жизнь всегда разнообразнее, но есть разница между официально разрешить стрелять в ногу, и признавать что есть частные случаи выстрелов в ногу. Т.е. либо забиваем на теорию, либо не принимаем/замечаем ее нарушителей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 21:41 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
ISO-OSI не просто теория, это мертворождённый монстр. А вот RFC - набор практик разной степени практичности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 22:09 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TBasil A. Sidorovпропущено... HTTP это транспортный протокол. Что, собственно и закодировано в его аббревиатуре. Уровень приложения - обработчики методов HTTP-запросов. Хорошо. На порту 80 не обязан висеть web-сервер. Пусть даже он там висит, возьмем порт 12345, где висит самопальный сервис с собственным протоколом обмена, где никак не упомянуто к кому обращение... В общем я к тому что reverse proxy это один из костылей IPv4, он работает, его используют, но это фундаментальное нарушение модели OSI, где заявлено независимость уровней друг от друга. Вобщем грязный хак. детский сад какой-то, господи. необходимость reverse proxy это никакие не хаки, и не IPv4 костыли. он нужен просто потому что а) OpenSSL страшно дыряв, и его нужно изолировать от бекэнда. Бекэнд вообще ничего не должен знать про SSL б) балансировать нагрузку как-то надо, выставлять в интернет целую кучу IP адресов напрямую - это клиника, кто между ними переключение будет делать при перегрузке? в) отказоустойчивость обеспечивать тоже надо - кто еще, как не reverse прокци будет делать HA переключение, при помирании одной из нод бекэнда? г) проблема медленных каналов у клиентов (3g, edge, v.42bis, гг) - зачем бекэнду (апач, с кучей памяти под PHP и т.п.) сидеть тратить время, ждать, пока клиент там выгребет свою порцию данных? бекэнд отдал фронтэнду ответ и пошел другого клиента обрабатывать, а прокси-фронтэнд с минимальными ресурсами (ему даже стек не нужен под каждый коннект) уже озаботится как доставить ответ клиенту д) gzip - тоже не дело бекэнда, как и поддержка этих ващих SPDY, HTTP 2.0 - весь этот треш даром не нужен на бекэнде (апаче) дальше продолжать лениво эти же правила останутся в силе и для IPv6, ничего не изменится. при чем тут вообще IPv4? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2016, 13:19 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaпри чем тут вообще IPv4? Разговор был про IPv4 vs IPv6, а HTTP просто частный случай их использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2016, 13:25 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Dima TРазговор был про IPv4 vs IPv6, а HTTP просто частный случай их использования. а что в этом мире кроме HTTP и RTP нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2016, 13:33 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
Изопропила что в этом мире кроме HTTP и RTP нужно? Да и RTP под вопросом. Вся медия в последние годы переводится на HTTP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2016, 13:42 |
|
||
|
inline extern из библиотеки, как правильно декларировать-имплементировать?
|
|||
|---|---|---|---|
|
#18+
nojavaпри этом даже гуру C++ прямо говорят - идея, что давайте все раскопипастим, а компилятор все это чудесно заоптимизирвет - оказалась пшиком, никакого прироста производительности никто так и не смог достичь, зато исполнимый код бухнет, вымывая L2/L3 кеши просто на ура.Не пшик, реально есть такая оптимизация. В Visual C++ она называется «identical comdat folding» (ICF) и реализована уже давно, в Visual C++ 6 точно есть. Например, есть программа: test_icf.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. parts.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. roots.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. «extern "C"» использовал, чтобы link-овочные имена были читабельные, без mangling-а. Смотрим сгенерированный map-файл (конфигурация Release): test_icf.map Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Функции add_part и add_root компилируются в одинаковый машинный код, поэтому linker разместил их в одном месте. Тут ещё наверняка важно, что нигде в C++-коде не берётся адрес этих функций, а значит не требуется идентичность (уникальность адреса). Скорее всего, эта оптимизация была сделана из-за шаблонов. Функции std::list<part_t*>::push_back и std::list<root_t*>::push_back компилируются в одинаковый машинный код, а их адрес обычно не берут. Тут правда есть одна тонкость. Если операционная система пишет что-нибудь типа «случился crash по адресу 00401093», то вы не сможете узнать, в какой функции, в add_part или add_root. То же самое со stack trace, который строится по адресам функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 04:28 |
|
||
|
|

start [/forum/search_topic.php?author=AndreyUl&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
293ms |
get tp. blocked users: |
2ms |
| others: | 376ms |
| total: | 909ms |

| 0 / 0 |
