Теория. Работа с размерностями знач. в переменных программ

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Wicked
незнакомец
Сообщения: 1
Зарегистрирован: 08.09.2016 12:15:29

Сообщение Wicked »

В свое время для диплома делал много расчетов, реализовывал похожий механизм с целью вывода и проверки размерностей. Основная идея базируется на Пи-теореме https://ru.wikipedia.org/wiki/%D0%9F%D0%B8-%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0. Любая физическая величина выражается через произведение 7-ми базовых физический величин в рациональных степенях. Реализация простая:

Код: Выделить всё

type
  TUnitValue = record
     Value: float;
     Unit: TBaseUnit;
  end;

  TBaseUnit = record // в системе СИ
     L: TRational;
     M: TRational;
     ....
    J: : TRational;
  end;
 

Следствие: сложение/умножение величин с размерностями возможны при по элементном равенстве "Unit". Умножение/Деление размерности производится поэлементно.
Реализуется перегрузка арифметический операций. Добавляются проводные величины из СИ или СГС (а также приставки(Мега, Кило и т.д.), при оформлении вывода значение Unit сравнивается со значением в базе и форматируется вывод.
Больше информации https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%B4%D1%83%D0%BD%D0%B0%D1%80%D0%BE%D0%B4%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%86
А так же ГОСТ 8.147-2002 Государственная система обеспечения единства измерений. ЕДИНИЦЫ ВЕЛИЧИН
К сожалению мои исходники канули в бездну, но на сорсфордже можно найти много схожих реализаций и размерностей и рациональных чисел. Помниться, в JEDI есть что то подобное.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Спасибо, посмотрю.
azsx
энтузиаст
Сообщения: 959
Зарегистрирован: 16.11.2015 05:38:32

Сообщение azsx »

оффтопик
Фатальные ошибки двоичной арифметики при работе с числами с плавающей точкой
https://habrahabr.ru/post/309812/
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

В общем пока так получилось. Пока без функций авто пересчета, просто описание.
https://github.com/pichugin-m/lab_IMDataType
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Код: Выделить всё

   //Тип строения
   TBuildingType = (
       btUnknow,                    //- Неопределено
       btGround,                    //- Площадка географическая
       btBuilding,                  //- Здание/Строение
       btArea,                      //- Резервное значение
       btFloor,                     //- Этаж/Уровень/Площадка внутри здания
       btRoom,                      //- Комната/Помещение
       btLevel,                     //- Отметка
       btLogicalType,               //- Условный объект
       btSection                    //- Секция
   );

Код: Выделить всё

   //Стадия строительства
   TLookWorkType = (
       lwtNone,                     //- Неопределено
       lwtNew,                      //- Новое
       lwtReconstruction,           //- Реконструкция
       lwtExistent                  //- Сущетвующий
   );

Зачем такие вещи хардкодить? тут нужен какойто рантайм механизм чтоб можно было под свои задачи настроить
Ответить