Ignore:
Timestamp:
May 23, 2009 3:47:00 AM (10 years ago)
Author:
forrest
Message:

try and improve stability - also long double interior point

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Clp/src/ClpHelperFunctions.cpp

    r1185 r1367  
    112112  }
    113113}
     114#if COIN_LONG_WORK
     115// For long double versions
     116CoinWorkDouble
     117maximumAbsElement(const CoinWorkDouble * region, int size)
     118{
     119  int i;
     120  CoinWorkDouble maxValue=0.0;
     121  for (i=0;i<size;i++)
     122    maxValue = CoinMax(maxValue,CoinAbs(region[i]));
     123  return maxValue;
     124}
     125void
     126setElements(CoinWorkDouble * region, int size, CoinWorkDouble value)
     127{
     128  int i;
     129  for (i=0;i<size;i++)
     130    region[i]=value;
     131}
     132void
     133multiplyAdd(const CoinWorkDouble * region1, int size, CoinWorkDouble multiplier1,
     134                 CoinWorkDouble * region2, CoinWorkDouble multiplier2)
     135{
     136  int i;
     137  if (multiplier1==1.0) {
     138    if (multiplier2==1.0) {
     139      for (i=0;i<size;i++)
     140        region2[i] = region1[i] + region2[i];
     141    } else if (multiplier2==-1.0) {
     142      for (i=0;i<size;i++)
     143        region2[i] = region1[i] - region2[i];
     144    } else if (multiplier2==0.0) {
     145      for (i=0;i<size;i++)
     146        region2[i] = region1[i] ;
     147    } else {
     148      for (i=0;i<size;i++)
     149        region2[i] = region1[i] + multiplier2*region2[i];
     150    }
     151  } else if (multiplier1==-1.0) {
     152    if (multiplier2==1.0) {
     153      for (i=0;i<size;i++)
     154        region2[i] = -region1[i] + region2[i];
     155    } else if (multiplier2==-1.0) {
     156      for (i=0;i<size;i++)
     157        region2[i] = -region1[i] - region2[i];
     158    } else if (multiplier2==0.0) {
     159      for (i=0;i<size;i++)
     160        region2[i] = -region1[i] ;
     161    } else {
     162      for (i=0;i<size;i++)
     163        region2[i] = -region1[i] + multiplier2*region2[i];
     164    }
     165  } else if (multiplier1==0.0) {
     166    if (multiplier2==1.0) {
     167      // nothing to do
     168    } else if (multiplier2==-1.0) {
     169      for (i=0;i<size;i++)
     170        region2[i] =  -region2[i];
     171    } else if (multiplier2==0.0) {
     172      for (i=0;i<size;i++)
     173        region2[i] =  0.0;
     174    } else {
     175      for (i=0;i<size;i++)
     176        region2[i] =  multiplier2*region2[i];
     177    }
     178  } else {
     179    if (multiplier2==1.0) {
     180      for (i=0;i<size;i++)
     181        region2[i] = multiplier1*region1[i] + region2[i];
     182    } else if (multiplier2==-1.0) {
     183      for (i=0;i<size;i++)
     184        region2[i] = multiplier1*region1[i] - region2[i];
     185    } else if (multiplier2==0.0) {
     186      for (i=0;i<size;i++)
     187        region2[i] = multiplier1*region1[i] ;
     188    } else {
     189      for (i=0;i<size;i++)
     190        region2[i] = multiplier1*region1[i] + multiplier2*region2[i];
     191    }
     192  }
     193}
     194CoinWorkDouble
     195innerProduct(const CoinWorkDouble * region1, int size, const CoinWorkDouble * region2)
     196{
     197  int i;
     198  CoinWorkDouble value=0.0;
     199  for (i=0;i<size;i++)
     200    value += region1[i]*region2[i];
     201  return value;
     202}
     203void
     204getNorms(const CoinWorkDouble * region, int size, CoinWorkDouble & norm1, CoinWorkDouble & norm2)
     205{
     206  norm1 = 0.0;
     207  norm2 = 0.0;
     208  int i;
     209  for (i=0;i<size;i++) {
     210    norm2 += region[i]*region[i];
     211    norm1 = CoinMax(norm1,CoinAbs(region[i]));
     212  }
     213}
     214#endif
    114215#ifdef DEBUG_MEMORY
    115216#include <malloc.h>
Note: See TracChangeset for help on using the changeset viewer.