Manu:

> What are you working on if I may ask?

Bioinformatics, exploratory programing, simulations, data munging, hardening of 
slow scripts, data visualization, data mining, optimization of some tasks, 
faster routines for dynamic code written by other people, and more.


> I do tend to write a lot of very
> maths-intensive code (physics, rendering, lighting), and I almost never
> find myself using any sort of pow, other than ^2, which I'm perfectly happy
> to type x*x.

The problem is that often you don't have a "x", but a "long_named_variable", so 
you have to write long_named_variable * long_named_variable. And often you have 
to compute an expression to square, so if you don't want to use a temporary 
variable you have to duplicate the expression. This is bug-prone and noisy.

Other cases:

1 << 5  ==>  2 ^^ 5  (more readable)

sqrt(3.5)  ==>  3.5 ^^ 0.5
Sometimes better:
return ((p1.x - p2.x) ^^ 2 + (p1.y - p2.y) ^^ 2) ^^ 0.5;

10, 100, 1000, ... ==>  map!(p => 10 ^^ p)(iota(2, ...))

You are allowed to write matrix code that overloads ^^ too.

DMD replaces x^^2 and x^^3 with inlined x**x and x*x*x, so it's better than 
using pow efficiency-wise. DMD knows few other exponent rules that applies as 
tricks, that I think pow() doesn't use. And programmers usually don't use pow 
to square a variable, while D programmers feel natural to use ^^ to square. So 
comparing the use cases of pow with ^^ is wrong.

I suggest you to start using ^^ in your D2 code and you will find it more and 
more useful.

I have now counted about 730 distinct usages of ^^ operator in the D2 code I 
have written and I am keeping my hands on at the moment. The real number is 
probably over 800. You are not going to deprecate it.


> Realistically, how often do you cube? It's extremely rare in my experience.

^^3 is not common.

Bye,
bearophile

Reply via email to