From: Walter L. <la...@na...> - 1998-09-08 23:44:05
|
Hi, I was looking at the example in the documentation of Blitz of ray reflection. It claims that if you start with typedef TinyVector<double,3> ray; ray x,y,n; y = x - 2 * dot(x,n) * n; it becomes double _t1 = x[0]*n[0]+x[1]*n[1]+x[2]*n[2]; double _t2 = _t1 + _t1; y[0] = x[0] - _t2 * n[0]; y[1] = x[1] - _t2 * n[1]; y[2] = x[2] - _t2 * n[2]; I've looked through the blitz library and it seems like what Blitz really generates is y[0] = x[0] - 2*(x[0]*n[0]+x[1]*n[1]+x[2]*n[2]) * n[0]; y[1] = x[1] - 2*(x[0]*n[0]+x[1]*n[1]+x[2]*n[2]) * n[1]; y[2] = x[2] - 2*(x[0]*n[0]+x[1]*n[1]+x[2]*n[2]) * n[2]; That is, it does not seem to actually create a temporary variable. Do I just not understand Blitz correctly, or is it that the temporary is an optimization performed by the compiler? If so, is there any hope that the compiler will be able to do such an optimization if the objects in the array are more complicated (specifically, if I repeated the above code with a TinyVector<Vector<double>,3>)? Thanks, Walter Landry la...@sp... --------------------- blitz-dev list -------------------------------- * To subscribe/unsubscribe: mail to maj...@oo..., with "subscribe blitz-dev" or "unsubscribe blitz-dev" in the body of the message * Blitz++ web page: http://oonumerics.org/blitz/ |