@@ -526,7 +526,7 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO
526
526
BLASLONG width , i , j , k ;
527
527
BLASLONG n , n_from , n_to ;
528
528
int mode , mask ;
529
- double dnum ;
529
+ double dnum , di , dinum ;
530
530
531
531
if ((nthreads == 1 ) || (args -> n < nthreads * SWITCH_RATIO )) {
532
532
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
601
601
602
602
if (nthreads - num_cpu > 1 ) {
603
603
604
- double di = (double )i ;
604
+ di = (double )i ;
605
605
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 ) );
607
612
608
613
if (num_cpu == 0 ) width = n - (((n - width )/(mask + 1 )) * (mask + 1 ) );
609
614
@@ -643,10 +648,15 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO
643
648
644
649
if (nthreads - num_cpu > 1 ) {
645
650
646
- double di = (double )i ;
651
+ di = (double )i ;
647
652
648
- width = ((( BLASLONG )(( sqrt ( di * di + dnum ) - di ) + mask )/( mask + 1 )) * ( mask + 1 )) ;
653
+ dinum = di * di + dnum ;
649
654
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
+
650
660
if ((width > n - i ) || (width < mask )) width = n - i ;
651
661
652
662
} else {
0 commit comments