8 return float2(Z.x,-Z.y);
12 return float2(LHS.x*RHS.x-LHS.y*RHS.y,LHS.x*RHS.y+LHS.y*RHS.x);
16 return sqrt(dot(Z,Z));
20 float2
Divide(float2 Numerator,float2 Denominator){
21 return float2(Numerator.x*Denominator.x+Numerator.y*Denominator.y,-Numerator.x*Denominator.y+Numerator.y*Denominator.x)/dot(Denominator,Denominator);
26 return float2(Z.x,-Z.y)/dot(Z,Z);
30 return float2(Z.x*Z.x-Z.y*Z.y,2.0f*Z.x*Z.y);
42 float ZLengthSq=dot(Z,Z);
43 float ZLengthInv=rsqrt(ZLengthSq);
44 float2 UnnormalizedRoot=Z*ZLengthInv+float2(1.0f,0.0f);
45 float UnnormalizedRootLengthSq=dot(UnnormalizedRoot,UnnormalizedRoot);
46 float NormalizationFactorInvSq=UnnormalizedRootLengthSq*ZLengthInv;
47 float NormalizationFactor=rsqrt(NormalizationFactorInvSq);
48 return NormalizationFactor*UnnormalizedRoot;
55 float2 ZPositiveRealPart=float2(abs(Z.x),Z.y);
57 return (Z.x>=0.0)?ComputedRoot:ComputedRoot.yx;
63 float Argument=atan2(Z.y,Z.x);
64 float NewArgument=Argument/3.0f;
65 float2 NormalizedRoot;
66 sincos(NewArgument,NormalizedRoot.y,NormalizedRoot.x);
67 return NormalizedRoot*pow(dot(Z,Z),1.0f/6.0f);
74 return float2x2(Vector[0].x,-Vector[0].y,Vector[1].x,-Vector[1].y);
77 return float3x2(Vector[0].x,-Vector[0].y,Vector[1].x,-Vector[1].y,Vector[2].x,-Vector[2].y);
80 return float4x2(Vector[0].x,-Vector[0].y,Vector[1].x,-Vector[1].y,Vector[2].x,-Vector[2].y,Vector[3].x,-Vector[3].y);
82 void Conjugate(out float2 OutConjugateVector[5],float2 Vector[5]){
83 [unroll]
for(
int i=0;i!=5;++i){
84 OutConjugateVector[i]=float2(Vector[i].x,-Vector[i].x);
90 #define POLYNOMIAL_DEGREE 1
95 float2 Result=pCoefficient[POLYNOMIAL_DEGREE];
96 [unroll]
for(
int i=POLYNOMIAL_DEGREE-1;i>=0;--i){
97 Result=
Multiply(X,Result)+pCoefficient[i];
101 #define POLYNOMIAL_DEGREE 2
103 float2 Result=pCoefficient[POLYNOMIAL_DEGREE];
104 [unroll]
for(
int i=POLYNOMIAL_DEGREE-1;i>=0;--i){
105 Result=
Multiply(X,Result)+pCoefficient[i];
109 #define POLYNOMIAL_DEGREE 3
111 float2 Result=pCoefficient[POLYNOMIAL_DEGREE];
112 [unroll]
for(
int i=POLYNOMIAL_DEGREE-1;i>=0;--i){
113 Result=
Multiply(X,Result)+pCoefficient[i];
117 #define POLYNOMIAL_DEGREE 4
119 float2 Result=pCoefficient[POLYNOMIAL_DEGREE];
120 [unroll]
for(
int i=POLYNOMIAL_DEGREE-1;i>=0;--i){
121 Result=
Multiply(X,Result)+pCoefficient[i];
125 #define POLYNOMIAL_DEGREE 5
127 float2 Result=pCoefficient[POLYNOMIAL_DEGREE];
128 [unroll]
for(
int i=POLYNOMIAL_DEGREE-1;i>=0;--i){
129 Result=
Multiply(X,Result)+pCoefficient[i];
133 #define POLYNOMIAL_DEGREE 6
135 float2 Result=pCoefficient[POLYNOMIAL_DEGREE];
136 [unroll]
for(
int i=POLYNOMIAL_DEGREE-1;i>=0;--i){
137 Result=
Multiply(X,Result)+pCoefficient[i];
141 #define POLYNOMIAL_DEGREE 7
143 float2 Result=pCoefficient[POLYNOMIAL_DEGREE];
144 [unroll]
for(
int i=POLYNOMIAL_DEGREE-1;i>=0;--i){
145 Result=
Multiply(X,Result)+pCoefficient[i];
149 #define POLYNOMIAL_DEGREE 8
151 float2 Result=pCoefficient[POLYNOMIAL_DEGREE];
152 [unroll]
for(
int i=POLYNOMIAL_DEGREE-1;i>=0;--i){
153 Result=
Multiply(X,Result)+pCoefficient[i];
float2 Conjugate(float2 Z)
float2 Divide(float2 Numerator, float2 Denominator)
float2 Multiply(float2 LHS, float2 RHS)
float2 EvaluatePolynomial(float2 pCoefficient[POLYNOMIAL_DEGREE+1], float2 X)
float2 SquareRootUnsafe(float2 Z)
float Magnitude(float2 Z)
float2 Reciprocal(float2 Z)
float2 CubicRoot(float2 Z)
float2 SquareRoot(float2 Z)