@@ -237,13 +237,19 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
237237 temp0 = NAN ;
238238 else
239239 temp0 = - da_i * x [i + 1 ];
240- x [i + 1 ] = da_i * x [i ];
240+ if (!isinf (x [i + 1 ]))
241+ x [i + 1 ] = da_i * x [i ];
242+ else
243+ x [i + 1 ] = NAN ;
241244 x [i ] = temp0 ;
242245 if (isnan (x [i + inc_x ]) || isinf (x [i + inc_x ]))
243246 temp1 = NAN ;
244247 else
245248 temp1 = - da_i * x [i + 1 + inc_x ];
246- x [i + 1 + inc_x ] = da_i * x [i + inc_x ];
249+ if (!isinf (x [i + 1 + inc_x ]))
250+ x [i + 1 + inc_x ] = da_i * x [i + inc_x ];
251+ else
252+ x [i + 1 + inc_x ] = NAN ;
247253 x [i + inc_x ] = temp1 ;
248254 i += 2 * inc_x ;
249255 j += 2 ;
@@ -256,7 +262,10 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
256262 temp0 = NAN ;
257263 else
258264 temp0 = - da_i * x [i + 1 ];
259- x [i + 1 ] = da_i * x [i ];
265+ if (!isinf (x [i + 1 ]))
266+ x [i + 1 ] = da_i * x [i ];
267+ else
268+ x [i + 1 ] = NAN ;
260269 x [i ] = temp0 ;
261270 i += inc_x ;
262271 j ++ ;
@@ -330,7 +339,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
330339 zscal_kernel_8_zero (n1 , x );
331340 else
332341 zscal_kernel_8 (n1 , da_r , da_i , x );
333- else if (da_i == 0 )
342+ else if (da_i == 0 && da_r == da_r )
334343 zscal_kernel_8_zero_i (n1 , alpha , x );
335344 else
336345 zscal_kernel_8 (n1 , da_r , da_i , x );
@@ -339,29 +348,41 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
339348 j = n1 ;
340349 }
341350
342- if (da_r == 0.0 ) {
351+ if (da_r == 0.0 || isnan ( da_r ) ) {
343352
344353 if (da_i == 0.0 ) {
345-
354+ double res = 0.0 ;
355+ if (isnan (da_r )) res = da_r ;
346356 while (j < n ) {
347357
348- x [i ] = 0.0 ;
349- x [i + 1 ] = 0.0 ;
358+ x [i ] = res ;
359+ x [i + 1 ] = res ;
350360 i += 2 ;
351361 j ++ ;
352362
353363 }
354364
365+ } else if (isinf (da_r )) {
366+ while (j < n ) {
367+ x [i ] = NAN ;
368+ x [i + 1 ] = da_r ;
369+ i += 2 ;
370+ j ++ ;
371+ }
355372 } else {
356373
357374 while (j < n ) {
358375
359- if (isnan ( x [ i ]) || isinf (x [i ]))
376+ if (isinf (x [i ]))
360377 temp0 = NAN ;
361378 else
362379 temp0 = - da_i * x [i + 1 ];
363- x [i + 1 ] = da_i * x [i ];
364- x [i ] = temp0 ;
380+ if (!isinf (x [i + 1 ]))
381+ x [i + 1 ] = da_i * x [i ];
382+ else
383+ x [i + 1 ] = NAN ;
384+ if (x [i ]== x [i ])
385+ x [i ] = temp0 ;
365386 i += 2 ;
366387 j ++ ;
367388
0 commit comments