powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / inline extern из библиотеки, как правильно декларировать-имплементировать?
25 сообщений из 276, страница 7 из 12
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283463
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилможет напечатать 1 0 ?
Был неправ, признаю: ни вызовы get(), ни rand() оно не перепутает из-за внутренних
побочных эффектов, что создаёт их зависимость.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283465
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу это легко фиксится introduce temp var.
Не очень легко. Я исходники глянул и вспомнил почему поверил на слово без проверки. С++ и C# . Код заметно отличается т.к. в C# пришлось отказаться от перегрузки +,- и т.д. из-за того что тормозит она в шарпе.
А т.к. rand() много где вызывается, то не стал связываться с проверкой предложенной гипотезы, слишком муторно там все подгонять чтобы порядок соблюсти.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283467
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКстати задумался... возможно ли написать честную последовательность float/double псевдо случайных
величин по линейному закону.

Сама плотность значений float/double распределена по вещесвенной оси изначально неравномерно.
А нужна ли она? Если под словом "честная" понимается весь допустимый диапазон, т.е. от 10^-308 до 10^308, то какое возможно практическое применение?

Есть реализации работающие в диапазоне 0-1, например в C# Random.NextDouble()
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283468
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел исходники 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.
      public virtual double NextDouble() {
        return Sample(); 
      } 

      protected virtual double Sample() {
          //Including this division at the end gives us significantly improved
          //random number distribution.
          return (InternalSample()*(1.0/MBIG));
      }
    
      private int InternalSample() {
          int retVal;
          int locINext = inext;
          int locINextp = inextp;
 
          if (++locINext >=56) locINext=1;
          if (++locINextp>= 56) locINextp = 1;
          
          retVal = SeedArray[locINext]-SeedArray[locINextp];
 
          if (retVal == MBIG) retVal--;          
          if (retVal<0) retVal+=MBIG;
          
          SeedArray[locINext]=retVal;
 
          inext = locINext;
          inextp = locINextp;
                    
          return retVal;
      }


Не стал МС с double заморачиваться, последовательность генерится в int`ах, а в double только конвертируется.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283480
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

интересно, как ты себе представляешь линейный конгруэнтный гпсч в плавучке
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283482
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2SashaMercury,

Саша, ты совсем зря все буквы использованного тобой алфавита истратил, от первой до последней.

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

Судя по всему, ты занимаешься преждевременным чтением.
Лучше было бы, если бы учил буквы Марсианского алфавита.
Предложенное тобой чтение - для старших курсов, только для тех, кто азбуку уже осилил.


автор...Не вникая...
а вот это ты мощно задвинул. Здесь жирный плюс. Так и продолжай дальше - не вникая .
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283494
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение 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.
x = $1
? x / $1.18 * $0.18 && = 0.1526
? x  * $0.18 / $1.18 && = 0.1525


и тоже в double
Код: plaintext
1.
2.
3.
y = 1
? y / 1.18 * 0.18 && = 0.15254237
? y  * 0.18 / 1.18 && = 0.152542


Только мне кажется что во втором случае повыше точность?
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283503
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

открой тайну - чему равно 997654321054321 / 1.00000000000004 ?
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283504
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

опечатка -
987654321054321 / 1.00000000000004
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283507
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima T,

открой тайну - чему равно 997 654 321 054 321 / 1.000 000 000 000 04 ?
Не открою, т.к. тут попытка оперирования числами общей разрядностью 29 знаков. Бери какую-нибудь мат-либу и считай.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283509
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tпопытка оперирования числами общей разрядностью 29 знаков
мне казалось - оба 15-разрядные, да и результат 15-разрядный хочу.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283511
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima Tпопытка оперирования числами общей разрядностью 29 знаков
мне казалось - оба 15-разрядные, да и результат 15-разрядный хочу.
Приведи сначала оба числа в единую разрядность, т.е.
Код: plaintext
997 654 321 054 321.000 000 000 000 00 / 000 000 000 000 001.000 000 000 000 04
а потом посчитай сколько разрядов используется.
Хотеть не вредно, бери мат.либу и реализуй свои хотелки.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283513
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТолько мне кажется что во втором случае повыше точность?
Мне кажется это неверная постановка вопроса. Мы не должны
искать способа повышать точность. Мы должны очертить класс
операций которые позволяют нам работать с double недеструктивно.

По поводу присвоений. Твой замечательный цикл который сейчас
греет твой кусок кремния и твою комнату имеет мало пользы.
Я предлагаю его упростить и взять множество ключевых констант
MIN_DOUBLE, MAX_DOUBLE ... etc и различные варианты
"бегущего бита" или множества значений десятичной системы
таких как 9, 99, 999 e.t.c. И проверить только на них и сделать выводы.

По поводу целочисленного деления. Как верно было сказано, точность
последней копейки может плавать в зависимости от типа данных.
BCD-арифметика даёт бухгалтерское (клеточное) деление.
Двоичная целочисленная может дать другой результат. И наш
волшебный double-тип может дать еще более парадоксальный результат.
Если я ошибся - то прошу поправить.

Почему я настойчиво вопрошаю к сообществу.

Предлагаю брать за эталон Oracle-NUMBER, или бухгалтерский
калькулятор Sharp/Citizen для проверки точности делений.
Или любой другой финансовый тип.

Частное от деление денег на деньги или денег на целое должно давать в
последнем знаке ожидаемый результат.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283515
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TХотеть не вредно
а вот double использовать вместо decimal - вредно.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283520
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima TХотеть не вредно
а вот double использовать вместо decimal - вредно.
Если ты про decimal из C#, то это удел только .net, в других ЯП подобное не замечал. Тут вообще-то форум по С/С++. Соглашусь что decimal один из наилучших велосипедов, 128 бит это 128 бит, но тоже не идеальный.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283521
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TТолько мне кажется что во втором случае повыше точность?
Мне кажется это неверная постановка вопроса. Мы не должны
искать способа повышать точность. Мы должны очертить класс
операций которые позволяют нам работать с double недеструктивно.
Так я и показал тестом что double недеструктивен, т.е. вполне точен. но не надо от него чудес ожидать, типа 19479327 . Если в целочисленных типах происходит переполнение, а в плавающих потеря точности, то это не баг, а фича, которой надо уметь грамотно пользоваться, а не тупо утверждать что double неточен по определению.
Но есть минусы double, я их тоже указывал: сравнение, сортировка как следствие, что не дает его полноценно использовать для значений с фиксированной разрядностью.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283522
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсли ты про decimal из C#,
он там кривой(точность нельзя задать).
нормальный в коболе и наследниках
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283524
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уж про полноценные десятичные типы, то у меня был инцидент. Тип NUMERIC в dbf, реально хранится как строка десятичных цифр. Фокс все отлично посчитал (используя double) но поле было N(10,2), а значение туда не влазило и сохранилось как N(10,1), такая вот баго-фича, строка то читаема, а я огреб по полной от бухгалтерии, которая потеряла пару копеек в десятках миллионов.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283526
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилон там кривой(точность нельзя задать).
И это тоже, но и производительность с ним не та. Мне надо было быстрый парсер кучи файлов с кучей цен. Просто перегнать один формат в другой. И double гораздо быстрее чем decimal. Оно и понятно: нативный тип понимаемый процом против самодельной структуры от МС.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283528
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПриведи сначала оба числа в единую разрядность
При операциях с числами с плавающей точкой они уже в одной разрядности:
0.987654321054321*10 15 и 0.100000000000004*10 -1 .
Мантисы перемножаются отдельно, показатели складываются отдельно.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283530
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМне надо было быстрый парсер кучи файлов с кучей цен
это скорее обработка текста, а не вычисления
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283531
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TПриведи сначала оба числа в единую разрядность
При операциях с числами с плавающей точкой они уже в одной разрядности:
0.987654321054321*10 15 и 0.100000000000004*10 -1 .
Мантисы перемножаются отдельно, показатели складываются отдельно.
Не надо про сферических коней, почитай вступление 19478638 , речь про double как альтернативе расчетам с числами с фиксированной разрядностью.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283534
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tпочитай вступление
Если уж читать вступление, так с того места, где кое-кто спутал финансистов с бухгалтерами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283535
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima TМне надо было быстрый парсер кучи файлов с кучей цен
это скорее обработка текста, а не вычисления
текст 10 во внутренние 2 (double или decimal) потом обратно в текст 10. Это тоже вычисления. И по факту double оказалось быстрее, да и косяки с разрядностью decimal при выводе еще вылезли. Разговор ведь про общее использование, в т.ч. и такое. Это просто частный случай, демонстрирующий что нет идеального решения проблем работы с числами с фиксированной разрядностью.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39283536
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima Tпочитай вступление
Если уж читать вступление, так с того места, где кое-кто спутал финансистов с бухгалтерами.

если ты про это 19479458 , то огреб я от главбуха тогда.
В остальном тут топик вообще про inline, поэтому остальное читай по диагонали, как субтопики :)
...
Рейтинг: 0 / 0
25 сообщений из 276, страница 7 из 12
Форумы / C++ [игнор отключен] [закрыт для гостей] / inline extern из библиотеки, как правильно декларировать-имплементировать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]