Example #1
0
int
main (void)
{
  double d = NAN;
  double zero = 0.0;
  if (numeric_equal (d, d))
    return 1;
  d = HUGE_VAL;
  if (!numeric_equal (d, 1.0 / zero))
    return 1;
  return 0;
}
Example #2
0
bool	_XEVOL_BASE_API_ XM_Inv(const xmat3& m1 , xmat3& mOut)
{
	xmat3 m = m1;
	int max_r;
	//int max_c;
	float pivot = 1.0;
	mOut.identity();
	for(int row = 0 ; row < 3 ; row++ )
	{
		//选主元.
		pivot = m.m[row][row];

		max_r = row;
		for( int i = row ; i < 3 ; i++ )
		{
			float t = (float)fabs(m.m[i][row]);

			if( t > fabs(pivot))
			{
				pivot = m.m[i][row];
				max_r = i;
			}
		}
		//主元选定.
		if( numeric_equal(pivot,0)  )
			return false;
		//交换行
		if(max_r != row)
		{
			XM_Swap(m.m[max_r][0],m.m[row][0]); 	XM_Swap(mOut.m[max_r][0],mOut.m[row][0]);
			XM_Swap(m.m[max_r][1],m.m[row][1]); 	XM_Swap(mOut.m[max_r][1],mOut.m[row][1]);
			XM_Swap(m.m[max_r][2],m.m[row][2]); 	XM_Swap(mOut.m[max_r][2],mOut.m[row][2]);
		}

		//归一化到1

		for( int x = 0 ; x < 3 ; x ++)
		{
			mOut.m[row][x] /= pivot;
			m.m[row][x] /= pivot;
		}

		//消去当前列,除了当前行上的以外。该列全部成为0
		for(int y = 0 ; y < 3 ; y ++)
		{
			if(y == row )
				continue;
			float times = m.m[y][row];
			//消去。
			for (int x = 0 ; x < 3 ; x ++)
			{
				m.m[y][x] -= m.m[row][x] * times;
				mOut.m[y][x] -= mOut.m[row][x] * times;
			}
		}

	}
	return true;
}
Example #3
0
int spn_value_equal(const SpnValue *lhs, const SpnValue *rhs)
{
	/* first, make sure that we compare values of the same type
	 * (values of different types cannot possibly be equal)
	 */
	if (valtype(lhs) != valtype(rhs)) {
		return 0;
	}

	switch (valtype(lhs)) {
	case SPN_TTAG_NIL:    { return 1; /* nil can only be nil */ }
	case SPN_TTAG_BOOL:   { return boolvalue(lhs) == boolvalue(rhs); }
	case SPN_TTAG_NUMBER: { return numeric_equal(lhs, rhs); }

	case SPN_TTAG_STRING:
	case SPN_TTAG_ARRAY:
	case SPN_TTAG_HASHMAP:
	case SPN_TTAG_FUNC: {
		return spn_object_equal(objvalue(lhs), objvalue(rhs));
	}

	case SPN_TTAG_USERINFO: {
		/* an object can not equal a non-object */
		if (isobject(lhs) != isobject(rhs)) {
			return 0;
		}

		if (isobject(lhs)) {
			return spn_object_equal(objvalue(lhs), objvalue(rhs));
		} else {
			return ptrvalue(lhs) == ptrvalue(rhs);
		}
	}
	default:
		SHANT_BE_REACHED();
	}

	return 0;
}