changeset 280:f60b0c431f3f

Don't store the floor() result in integer because it can be out-of-range
author Csaba Kertesz <csaba.kertesz@gmail.com>
date Sun, 15 Jan 2017 13:56:31 +0200
parents 6ee836d79500
children 41b0f6b9b9a4
files src/scalar.c
diffstat 1 files changed, 20 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/scalar.c	Fri Dec 19 17:46:10 2014 +0000
+++ b/src/scalar.c	Sun Jan 15 13:56:31 2017 +0200
@@ -301,8 +301,8 @@
 
 int xtract_tristimulus_1(const double *data, const int N, const void *argv, double *result)
 {
-    int n = N >> 1, h = 0, i;
-    double den = 0.0, p1 = 0.0, fund = 0.0, temp = 0.0;
+    int n = N >> 1, i;
+    double den = 0.0, p1 = 0.0, fund = 0.0, temp = 0.0, h = 0.0;
     const double *freqs;
 
     fund = *(double *)argv;
@@ -314,7 +314,7 @@
         {
             den += temp;
             h = floor(freqs[i] / fund + 0.5);
-            if(h == 1)
+            if(h > 0 && h < 2 && (int)h == 1)
                 p1 += temp;
         }
     }
@@ -333,10 +333,9 @@
 
 int xtract_tristimulus_2(const double *data, const int N, const void *argv, double *result)
 {
-
-    int n = N >> 1, h = 0, i;
-    double den, p2, p3, p4, ps, fund, temp;
-    den = p2 = p3 = p4 = ps = fund = temp = 0.0;
+    int n = N >> 1, i;
+    double den, p2, p3, p4, ps, fund, temp, h;
+    den = p2 = p3 = p4 = ps = fund = temp = h = 0.0;
     const double *freqs;
 
     fund = *(double *)argv;
@@ -348,21 +347,24 @@
         {
             den += temp;
             h = floor(freqs[i] / fund + 0.5);
-            switch (h)
+            if (h > 1 && h < 5)
             {
-                case 2:
-                    p2 += temp;
+                switch ((int)h)
+                {
+                    case 2:
+                        p2 += temp;
                     break;
 
-                case 3:
-                    p3 += temp;
+                    case 3:
+                        p3 += temp;
                     break;
 
-                case 4:
-                    p4 += temp;
+                    case 4:
+                        p4 += temp;
 
-                default:
-                    break;
+                    default:
+                        break;
+                }
             }
         }
     }
@@ -384,8 +386,8 @@
 
 int xtract_tristimulus_3(const double *data, const int N, const void *argv, double *result)
 {
-    int n = N >> 1, h = 0, i;
-    double den = 0.0, num = 0.0, fund = 0.0, temp = 0.0;
+    int n = N >> 1, i;
+    double den = 0.0, num = 0.0, fund = 0.0, temp = 0.0, h = 0.0;
     const double *freqs;
 
     fund = *(double *)argv;