libflame
revision_anchor
|
00001 /* 00002 00003 Copyright (C) 2014, The University of Texas at Austin 00004 00005 This file is part of libflame and is available under the 3-Clause 00006 BSD license, which can be found in the LICENSE file at the top-level 00007 directory, or at http://opensource.org/licenses/BSD-3-Clause 00008 00009 */ 00010 00011 FLA_Error FLA_Apply_GTG( FLA_Obj gamma, FLA_Obj sigma, FLA_Obj delta1, FLA_Obj epsilon1, FLA_Obj delta2 ); 00012 FLA_Error FLA_Apply_GTG_ops( float* gamma, 00013 float* sigma, 00014 float* delta1, 00015 float* epsilon1, 00016 float* delta2 ); 00017 FLA_Error FLA_Apply_GTG_opd( double* gamma, 00018 double* sigma, 00019 double* delta1, 00020 double* epsilon1, 00021 double* delta2 ); 00022 00023 #define MAC_Apply_GTG_ops( gamma, sigma, delta1, epsilon, delta2 ) \ 00024 { \ 00025 float g, s; \ 00026 float d1, e, d2; \ 00027 float g2, s2, tgse; \ 00028 \ 00029 g = *(gamma); \ 00030 s = *(sigma); \ 00031 \ 00032 d1 = *(delta1); \ 00033 e = *(epsilon); \ 00034 d2 = *(delta2); \ 00035 \ 00036 g2 = g * g; \ 00037 s2 = s * s; \ 00038 tgse = 2.0 * g * s * e; \ 00039 \ 00040 *(delta1) = g2 * d1 + tgse + s2 * d2; \ 00041 *(delta2) = s2 * d1 - tgse + g2 * d2; \ 00042 *(epsilon) = g * s * (d2 - d1) + e * (g2 - s2); \ 00043 } 00044 00045 #define MAC_Apply_GTG_opd( gamma, sigma, delta1, epsilon, delta2 ) \ 00046 { \ 00047 /* 00048 double g, s; \ 00049 double d1, e, d2; \ 00050 double t, st; \ 00051 \ 00052 g = *(gamma); \ 00053 s = *(sigma); \ 00054 \ 00055 d1 = *(delta1); \ 00056 e = *(epsilon); \ 00057 d2 = *(delta2); \ 00058 \ 00059 t = s * ( d2 - d1 ) + 2.0 * g * e; \ 00060 st = s * t; \ 00061 e = g * t - e; \ 00062 d1 = st + d1; \ 00063 d2 = d2 - st; \ 00064 \ 00065 *(delta1) = d1; \ 00066 *(epsilon) = e; \ 00067 *(delta2) = d2; \ 00068 */ \ 00069 double g, s; \ 00070 double d1, e, d2; \ 00071 double g2, s2, tgse; \ 00072 \ 00073 g = *(gamma); \ 00074 s = *(sigma); \ 00075 \ 00076 d1 = *(delta1); \ 00077 e = *(epsilon); \ 00078 d2 = *(delta2); \ 00079 \ 00080 g2 = g * g; \ 00081 s2 = s * s; \ 00082 tgse = 2.0 * g * s * e; \ 00083 \ 00084 *(delta1) = g2 * d1 + tgse + s2 * d2; \ 00085 *(delta2) = s2 * d1 - tgse + g2 * d2; \ 00086 *(epsilon) = g * s * (d2 - d1) + e * (g2 - s2); \ 00087 \ 00088 /* 00089 double g, s; \ 00090 double d1, e, d2; \ 00091 double g2, s2; \ 00092 double st; \ 00093 \ 00094 g = *(gamma); \ 00095 s = *(sigma); \ 00096 \ 00097 d1 = *(delta1); \ 00098 e = *(epsilon); \ 00099 d2 = *(delta2); \ 00100 \ 00101 g2 = g * g; \ 00102 s2 = s * s; \ 00103 st = s2 * (d2 - d1) + 2.0 * g * s * e; \ 00104 \ 00105 *(delta1) = st + d1; \ 00106 *(delta2) = d2 - st; \ 00107 *(epsilon) = g * s * (d2 - d1) + e * (g2 - s2); \ 00108 */ \ 00109 } 00110