Exemple #1
0
large large::operator-( const large& v ) const
{
  if( v == 0 ) return *this;
  if( _neg != v._neg )  return ( *this + (-v) );
  if( compare_abs(v) < 0 ) return -( v - *this );

  large r = *this;
  word_t k = 1, w;

  for( size_t i = 0; i < r._val.size(); i++ )
  {
    if( i < v._val.size() )
    {
      dword_t d = (dword_t) r._val[i] - v._val[i] + k + _MAXWORD;
      w = dword_lo(d);
      k = dword_hi(d);
    }
    else
    {
      if( k == 1 ) break;
      dword_t d = (dword_t) r._val[i] + k + _MAXWORD;
      w = dword_lo(d);
      k = dword_hi(d);
    }
    r._val[i] = w;
  }

  r.normalize();
  return r;
}
Exemple #2
0
	void smooth_value_field::tick(double delta_seconds) {
		double averaging_constant =
			pow(smoothing_average_factor, averages_per_sec * delta_seconds);

		auto calculated_smoothed_value = value * averaging_constant + target_value * (1.0 - averaging_constant);

		if (calculated_smoothed_value.compare_abs(target_value, 1.f))
			calculated_smoothed_value = target_value;

		value = calculated_smoothed_value;
		discrete_value = value;
	}