Симметричное и транзитивное преобразование пользовательских единиц измерения в Perl

Я определил следующие настраиваемые единицы (псевдокод):

unix_days = unix_seconds/86400; 
nasa_seconds = unix_seconds - 946728000; 

Это позволяет мне напрямую преобразовывать unix_seconds в unix_days или unix_seconds в nasa_seconds.

Однако я не могу напрямую преобразовать unix_days обратно в unix_seconds без написания другой формулы.

Точно так же я не могу преобразовать nasa_seconds в unix_days без написания дополнительных формул.

Есть ли умная подпрограмма или пакет Perl, которые позволят мне сделать это без написания дополнительных функций? В частности, специальный пакет преобразования единиц измерения, который:

  • Может угадать обратную функцию преобразования единиц измерения. Например, f(x)=x/86400 противоположно g(y)=y*86400.

  • При необходимости можно применить транзитивность. Например, если unix_seconds = nasa_seconds + 946728000 (по функциональной инверсии) и unix_days = unix_seconds/86400, мы можем объединить их для прямого преобразования из nasa_seconds в unix_days.

Я могу писать формулы преобразования необычными способами, если это необходимо. Например, перевод градусов Цельсия в Фаренгейт можно записать как:

C to F: *1.8 +32 

Эту форму легко перевернуть: просто следуйте инструкциям в обратном и обратном порядке, а именно:

F to C: -32 /1.8 

Такое существует?


person Community    schedule 19.09.2014    source источник


Ответы (1)


Physics :: Unit должен предоставлять необходимые вам возможности.

person Diab Jerius    schedule 19.09.2014
comment
Отлично, спасибо! Я не знал, что есть такие пакеты, которые позволяют вам определять свои собственные единицы измерения. - person ; 20.09.2014