Add missing FUNCTION_PROFILE_END / IDEBUG_END after all return
paths to properly close the brace opened by FUNCTION_PROFILE_START.
Use a do { … } while(0) wrapper so the macros stay outside any
nested block.
The cases
[ c s ] * [ 0 ] = [ |db_i| ]
[-s c ] [ i*db_i ] [ 0 ]
and
[ c s ] * [ 0 ] = [ |db_r| ]
[-s c ] [ db_r ] [ 0 ]
computed s incorrectly. To flip the entries of vector,
s should be conjg(db)/|db| and not conjg(db) / da,
where da == 0.0.