forked from OSchip/llvm-project
parent
69fdf9b2e4
commit
c477f48f03
|
@ -8641,12 +8641,14 @@ bool ComplexExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {
|
|||
APFloat MaxCD = maxnum(abs(C), abs(D));
|
||||
if (MaxCD.isFinite()) {
|
||||
DenomLogB = ilogb(MaxCD);
|
||||
C = scalbn(C, -DenomLogB);
|
||||
D = scalbn(D, -DenomLogB);
|
||||
C = scalbn(C, -DenomLogB, APFloat::rmNearestTiesToEven);
|
||||
D = scalbn(D, -DenomLogB, APFloat::rmNearestTiesToEven);
|
||||
}
|
||||
APFloat Denom = C * C + D * D;
|
||||
ResR = scalbn((A * C + B * D) / Denom, -DenomLogB);
|
||||
ResI = scalbn((B * C - A * D) / Denom, -DenomLogB);
|
||||
ResR = scalbn((A * C + B * D) / Denom, -DenomLogB,
|
||||
APFloat::rmNearestTiesToEven);
|
||||
ResI = scalbn((B * C - A * D) / Denom, -DenomLogB,
|
||||
APFloat::rmNearestTiesToEven);
|
||||
if (ResR.isNaN() && ResI.isNaN()) {
|
||||
if (Denom.isPosZero() && (!A.isNaN() || !B.isNaN())) {
|
||||
ResR = APFloat::getInf(ResR.getSemantics(), C.isNegative()) * A;
|
||||
|
|
Loading…
Reference in New Issue