### Renormalization Part in 'Direction Cosine Matrix IMU: Theory'

After computing orthogoanl X, Y and Z matrix, a Taylor's expansion is used in 'Direction Cosine Matrix IMU: Theory'.

Scaling X, Y and Z using a Taylor's expansion,

[In the paper]

X_norm =  0.5 (3 - dot(X_orth, X_orth)) * X_orth

Y_norm =  0.5 (3 - dot(Y_orth, Y_orth)) * Y_orth

Z_norm =  0.5 (3 - dot(Z_orth, Z_orth)) * Z_orth

> dot(X,X) = dot product

But when I look at the C programming code.

[C programming code]

/* U scaling */
VectorDotProduct(&rmat, &rmat, &f_buff);
f_buff = 1./sqrt(f_buff);
for (i=0;i<3;i++) rmat[i] = rmat[i]*f_buff;

/* V scaling */
VectorDotProduct(&rmat, &rmat, &f_buff);
f_buff = 1./sqrt(f_buff);
for (i=0;i<3;i++) rmat[3+i] = rmat[3+i]*f_buff;

/* W scaling */
VectorDotProduct(&rmat, &rmat, &f_buff);
f_buff = 1./sqrt(f_buff);
for (i=0;i<3;i++) rmat[6+i] = rmat[6+i]*f_buff;

1) This way is to divide each element of each row instead of Taylor's expansion. But I am not sure how to represent mathmatically.Could anyone help me how to work and represent it?

2) '&' looks like pointers. If this symbol is the pointer in C programming, please tell me how to work.

3) Please could anyone tell me why this use 1/sqrt(x*x) instead of Taylor's expansion?

Thank you very much