[GiNaC-list] Checking consistency of units in GiNaC

Sheplyakov Alexei varg at theor.jinr.ru
Thu Jul 21 14:28:51 CEST 2005


On Thu, Jul 21, 2005 at 04:54:07PM +1000, John Pye wrote:

> I have some nice unit-checking code here as part of the freesteam project,
> http://pye.dyndns.org/freesteam/docs/class_units.html
> This class prevents things like "1 * bar + 3 * kg", and also ensures 
> validity of things like "Density rho = 5 * kg / (2 * metre2)"

It will work with _very_ simple expressions only, in particular,
it is impossible to check expression

pow(m1, 4-2*eps-2*j) - pow(m2, 2-2*j)*pow(p, 2-2*eps))

(where m1, m2, p have the same dimension) in this way.

> Does anyone have any comments on the advisability / feasibility of 
> trying to do this,

I don't think this code (or any other implementation playing with 
overloading of operator=, operator+, etc.) is suitable for GiNaC, since:

1) C++ compiler is unable[1] to do symbolic manipulations,
2) GiNaC overloads all these operators in its own way,
3) in some simple cases (say, polynomial or rational expressions) it 
is possible to do run-time checks in a far simpler way:

symbol M;
symbol L;
symbol a("a");
symbol b("b");

ex test = a*M/(b*pow(L,2));
assert(test.coeff(M)==1);
assert(test.coeff(L)==-2);


Best regards,
  Alexei

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://www.cebix.net/pipermail/ginac-list/attachments/20050721/e513b325/attachment.pgp


More information about the GiNaC-list mailing list