Beispiel #1
0
static double parse_decimal(const char *str, char **endptr)
{
	double result = 0, d = 1;

	result += parse_number(str, endptr);
	if (**endptr == '.')
	{
		++(*endptr);
		while (isdigit(**endptr)) ++(*endptr), d *= 10;
		result += digits_to_num(*endptr - 1) / d;
	}
	return result * parse_e_format(*endptr, endptr);
}
static bool cancel_digit (int nom, int denom, int N) {
	int nom_digits[N];
	int denom_digits[N];

	fill_digits (nom_digits, nom);
	fill_digits (denom_digits, denom);

	bool nom_trailing_zero = true;

	for (int i = 0; i < N; i++) {
		if (nom_digits[i] != 0)
			nom_trailing_zero = false;

		if (nom_trailing_zero)
			continue;

		bool denom_trailing_zero = true;

		for (int j = 0; j < N; j++) {
			if (denom_digits[j] != 0)
				denom_trailing_zero = false;

			if (denom_trailing_zero)
				continue;

			if (nom_digits[i] == denom_digits[j]) {
				int new_nom = digits_to_num (nom_digits, N, i);
				int new_denom = digits_to_num (denom_digits, N, j);

				if (nom * new_denom == denom * new_nom)
					return true;
			}
		}
	}

	return false;
}
Beispiel #3
0
static double parse_number(const char *str, char **endptr)
{
	while (isdigit(*str)) ++str; /* Pointer to the end of the parsed part. */
	*endptr = (char*)str--;
	return digits_to_num(str);
}