Skip to content

Commit 330044d

Browse files
authored
Fix potentiol domain error in sqrt
1 parent 9d1ea75 commit 330044d

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

driver/level3/level3_syrk_threaded.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO
526526
BLASLONG width, i, j, k;
527527
BLASLONG n, n_from, n_to;
528528
int mode, mask;
529-
double dnum;
529+
double dnum, di, dinum;
530530

531531
if ((nthreads == 1) || (args -> n < nthreads * SWITCH_RATIO)) {
532532
SYRK_LOCAL(args, range_m, range_n, sa, sb, 0);
@@ -601,9 +601,14 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO
601601

602602
if (nthreads - num_cpu > 1) {
603603

604-
double di = (double)i;
604+
di = (double)i;
605605

606-
width = (((BLASLONG)((sqrt(di * di + dnum) - di) + mask)/(mask+1)) * (mask+1) );
606+
dinum = di * di + dnum;
607+
608+
if (dinum > 0)
609+
width = (((BLASLONG)((sqrt(dinum) - di) + mask)/(mask+1)) * (mask+1) );
610+
else
611+
width = (((BLASLONG)(- di + mask)/(mask+1)) * (mask+1) );
607612

608613
if (num_cpu == 0) width = n - (((n - width)/(mask+1)) * (mask+1) );
609614

@@ -643,10 +648,15 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO
643648

644649
if (nthreads - num_cpu > 1) {
645650

646-
double di = (double)i;
651+
di = (double)i;
647652

648-
width = (((BLASLONG)((sqrt(di * di + dnum) - di) + mask)/(mask+1)) * (mask+1));
653+
dinum = di * di +dnum;
649654

655+
if (dinum > 0)
656+
width = (((BLASLONG)((sqrt(di * di + dnum) - di) + mask)/(mask+1)) * (mask+1));
657+
else
658+
width = (((BLASLONG)(- di + mask)/(mask+1)) * (mask+1));
659+
650660
if ((width > n - i) || (width < mask)) width = n - i;
651661

652662
} else {

0 commit comments

Comments
 (0)