85 lines
2.8 KiB
Diff
85 lines
2.8 KiB
Diff
From 9cc12d0377dd634b1b97954d076b715f982853b7 Mon Sep 17 00:00:00 2001
|
|
From: Patrick Alken <alken@colorado.edu>
|
|
Date: Fri, 4 Apr 2014 13:36:16 -0600
|
|
Subject: [PATCH] bug fix in sorting of complex numbers (bug #39055)
|
|
|
|
---
|
|
poly/test.c | 49 ++++++++++++++++++++++++++++++-------------------
|
|
1 file changed, 30 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/poly/test.c b/poly/test.c
|
|
index 9c147f6..d090802 100644
|
|
--- a/poly/test.c
|
|
+++ b/poly/test.c
|
|
@@ -25,11 +25,21 @@
|
|
#include <gsl/gsl_poly.h>
|
|
#include <gsl/gsl_heapsort.h>
|
|
|
|
+/* sort by Re(z) then by Im(z) */
|
|
static int
|
|
cmp_cplx(const double *a, const double *b)
|
|
{
|
|
- double t = (a[0] * a[0] + a[1] * a[1]) - (b[0] * b[0] + b[1] * b[1]);
|
|
- return t < 0.0 ? -1 : t > 0.0 ? 1 : 0;
|
|
+ double r = a[0] - b[0];
|
|
+
|
|
+ if (r == 0.0)
|
|
+ {
|
|
+ double t = a[1] - b[1];
|
|
+ return t < 0.0 ? -1 : t > 0.0 ? 1 : 0;
|
|
+ }
|
|
+ else if (r < 0.0)
|
|
+ return -1;
|
|
+ else
|
|
+ return 1;
|
|
}
|
|
|
|
int
|
|
@@ -534,25 +544,26 @@ main (void)
|
|
Problem reported by Munagala Ramanath (bug #39055)
|
|
*/
|
|
|
|
- double a[16] = { 32, -48, -8, 28, -8, 16, -16, 12, -16, 6, 10, -17, 10, 2, -4, 1 };
|
|
+ double a[16] = { 32, -48, -8, 28, -8, 16, -16, 12,
|
|
+ -16, 6, 10, -17, 10, 2, -4, 1 };
|
|
double z[16*2];
|
|
|
|
- double expected[16*20] = {
|
|
- 1.0000000000000000, 0.00000000000000000,
|
|
- 1.0000000000000000, 0.00000000000000000,
|
|
- -1.0000000000000000, 0.00000000000000000,
|
|
- -0.65893856175240950, 0.83459757287426684,
|
|
- -0.65893856175240950, -0.83459757287426684,
|
|
- -0.070891117403341281, -1.1359249087587791,
|
|
- -0.070891117403341281, 1.1359249087587791,
|
|
- 1.1142366961812986, -0.48083981203389980,
|
|
- 1.1142366961812986, 0.48083981203389980,
|
|
- -1.3066982484920768, 0.00000000000000000,
|
|
- 0.57284747839410854, 1.1987808988289705,
|
|
- 0.57284747839410854, -1.1987808988289705,
|
|
- -1.6078107423472359, 0.00000000000000000,
|
|
- 2.0000000000000000, 0.00000000000000000,
|
|
- 2.0000000000000000, 0.00000000000000000 };
|
|
+ double expected[16*2] = {
|
|
+ -1.6078107423472359, 0.00000000000000000,
|
|
+ -1.3066982484920768, 0.00000000000000000,
|
|
+ -1.0000000000000000, 0.00000000000000000,
|
|
+ -0.65893856175240950, -0.83459757287426684,
|
|
+ -0.65893856175240950, 0.83459757287426684,
|
|
+ -0.070891117403341281, -1.1359249087587791,
|
|
+ -0.070891117403341281, 1.1359249087587791,
|
|
+ 0.57284747839410854, -1.1987808988289705,
|
|
+ 0.57284747839410854, 1.1987808988289705,
|
|
+ 1.0000000000000000, 0.00000000000000000,
|
|
+ 1.0000000000000000, 0.00000000000000000,
|
|
+ 1.1142366961812986, -0.48083981203389980,
|
|
+ 1.1142366961812986, 0.48083981203389980,
|
|
+ 2.0000000000000000, 0.00000000000000000,
|
|
+ 2.0000000000000000, 0.00000000000000000 };
|
|
|
|
int i;
|
|
|
|
--
|
|
2.4.3
|
|
|