void print_util_putfloat(byte_stream_t *out_stream, float c, int32_t after_digits)
{
	int32_t i;
	float num = c;
	
	if (c<0) 
	{
		print_util_putstring(out_stream, "-");
		num=-c;
	} 
	else 
	{
		print_util_putstring(out_stream, "");
	}

	int32_t whole=abs((int32_t)num);
	float after=(num-(float)whole);

	putnum_tight(out_stream, whole, 10);
	print_util_putstring(out_stream, "."); 
	
	for (i=0; i<after_digits; i++) 
	{
		after*=10;
		print_util_putdigit(out_stream, (int32_t)after);
		after=after-(int32_t)after;
	}
}
void print_util_print_quaternion(byte_stream_t *out_stream, quat_t *quat, int32_t after_digits) 
{
	print_util_putstring(out_stream, "(");
	print_util_putfloat(out_stream, quat->s, after_digits);
	print_util_putstring(out_stream, ", ");
	print_util_print_vector(out_stream, quat->v, after_digits);
	print_util_putstring(out_stream, ") ");
}
void print_util_print_vector(byte_stream_t *out_stream, float const v[], int32_t after_digits)
{
	print_util_putstring(out_stream, "(");

	for (int32_t i = 0; i < 3; i++) 
	{
		print_util_putfloat(out_stream, v[i], after_digits);
		
		if (i < 2) 
		{
			print_util_putstring(out_stream, ", ");
		}
	}

	print_util_putstring(out_stream, ") ");

}
void print_util_print_matrix(byte_stream_t *out_stream, float v[], int32_t rows, int32_t columns, int32_t after_digits) 
{
	int32_t i, j;
	
	for (i=0; i<rows; i++) 
	{
		print_util_putstring(out_stream, "| ");
		
		for (j=0; j<columns; j++) 
		{
			print_util_putfloat(out_stream, v[i*rows+j], after_digits);
			if (j<columns-1) 
			{
				print_util_putstring(out_stream, ", ");
			}
		}

		print_util_putstring(out_stream, " |\n");
	}
}
void print_util_dbg_print(const char* s) 
{
	print_util_putstring(deb_stream, s);
}