source: trunk/ClpHelperFunctions.cpp @ 284

Last change on this file since 284 was 284, checked in by jpfasano, 16 years ago

Modified to compile with MS Visual Studio Version 6

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 KB
RevLine 
[263]1// Copyright (C) 2003, International Business Machines
2// Corporation and others.  All Rights Reserved.
3
4/*
5    Note (JJF) I have added some operations on arrays even though they may
6    duplicate CoinDenseVector.  I think the use of templates was a mistake
7    as I don't think inline generic code can take as much advantage of
8    parallelism or machine architectures or memory hierarchies.
9
10*/
11#include <cfloat>
12#include <cmath>
13#include "CoinHelperFunctions.hpp"
[269]14#include "CoinFinite.hpp"
[263]15double 
16maximumAbsElement(const double * region, int size)
17{
18  int i;
19  double maxValue=0.0;
20  for (i=0;i<size;i++) 
[284]21    maxValue = CoinMax(maxValue,fabs(region[i]));
[263]22  return maxValue;
23}
24void 
25setElements(double * region, int size, double value)
26{
27  int i;
28  for (i=0;i<size;i++) 
29    region[i]=value;
30}
31void 
32multiplyAdd(const double * region1, int size, double multiplier1,
33                 double * region2, double multiplier2)
34{
35  int i;
36  if (multiplier1==1.0) {
37    if (multiplier2==1.0) {
38      for (i=0;i<size;i++) 
39        region2[i] = region1[i] + region2[i];
40    } else if (multiplier2==-1.0) {
41      for (i=0;i<size;i++) 
42        region2[i] = region1[i] - region2[i];
43    } else if (multiplier2==0.0) {
44      for (i=0;i<size;i++) 
45        region2[i] = region1[i] ;
46    } else {
47      for (i=0;i<size;i++) 
48        region2[i] = region1[i] + multiplier2*region2[i];
49    }
50  } else if (multiplier1==-1.0) {
51    if (multiplier2==1.0) {
52      for (i=0;i<size;i++) 
53        region2[i] = -region1[i] + region2[i];
54    } else if (multiplier2==-1.0) {
55      for (i=0;i<size;i++) 
56        region2[i] = -region1[i] - region2[i];
57    } else if (multiplier2==0.0) {
58      for (i=0;i<size;i++) 
59        region2[i] = -region1[i] ;
60    } else {
61      for (i=0;i<size;i++) 
62        region2[i] = -region1[i] + multiplier2*region2[i];
63    }
64  } else if (multiplier1==0.0) {
65    if (multiplier2==1.0) {
66      // nothing to do
67    } else if (multiplier2==-1.0) {
68      for (i=0;i<size;i++) 
69        region2[i] =  -region2[i];
70    } else if (multiplier2==0.0) {
71      for (i=0;i<size;i++) 
72        region2[i] =  0.0;
73    } else {
74      for (i=0;i<size;i++) 
75        region2[i] =  multiplier2*region2[i];
76    }
77  } else {
78    if (multiplier2==1.0) {
79      for (i=0;i<size;i++) 
80        region2[i] = multiplier1*region1[i] + region2[i];
81    } else if (multiplier2==-1.0) {
82      for (i=0;i<size;i++) 
83        region2[i] = multiplier1*region1[i] - region2[i];
84    } else if (multiplier2==0.0) {
85      for (i=0;i<size;i++) 
86        region2[i] = multiplier1*region1[i] ;
87    } else {
88      for (i=0;i<size;i++) 
89        region2[i] = multiplier1*region1[i] + multiplier2*region2[i];
90    }
91  }
92}
93double 
94innerProduct(const double * region1, int size, const double * region2)
95{
96  int i;
97  double value=0.0;
98  for (i=0;i<size;i++)
99    value += region1[i]*region2[i];
100  return value;
101}
102void 
103getNorms(const double * region, int size, double & norm1, double & norm2)
104{
105  norm1 = 0.0;
106  norm2 = 0.0;
107  int i;
108  for (i=0;i<size;i++) {
109    norm2 += region[i]*region[i];
[284]110    norm1 = CoinMax(norm1,fabs(region[i]));
[263]111  }
112}
[275]113#ifdef DEBUG_MEMORY
114#include <malloc.h>
115#include <stdio.h>
116#include <stdlib.h>
[263]117
[275]118typedef void (*NEW_HANDLER)();
119static NEW_HANDLER new_handler;                        // function to call if `new' fails (cf. ARM p. 281)
120
121// Allocate storage.
122void *
123operator new(size_t size)
124{
125  void * p;
126  for (;;)
127    {
128      p = malloc(size);
129      if      (p)           break;        // success
130      else if (new_handler) new_handler();   // failure - try again (allow user to release some storage first)
131      else                  break;        // failure - no retry
132    }
133  if (size>1000000)
134    printf("Allocating memory of size %d\n",size);
135  return p;
136}
137
138// Deallocate storage.
139void
140operator delete(void *p)
141{
142  free(p);
143  return;
144}
145void
146operator delete [] (void *p)
147{
148  free(p);
149  return;
150}
151#endif
Note: See TracBrowser for help on using the repository browser.