Вы явно усложняете проблему. Прежде всего вам не нужны два отдельных цикла для чисел, поскольку между ними существует постоянная разница в 0,4, даже между -0.3
и 0.1
. Вам нужно только проверить, отрицателен ли он, или не знать, как их суммировать.
Циклы проще, если вы используете целое число в качестве счетчика. Если вам нужно 14 чисел, вы можете просто считать от 0 до 13, и из этого вы можете легко вычислить соответствующее значение с плавающей запятой.
Пример кода C #:
double negSum = 0.0, posSum = 0.0;
for (int i = 0; i < 14; i++) {
double number = -2.3 + (double)i * 0.4;
if (number < 0) {
negSum += number;
} else {
posSum += number;
}
}
Конечно, вы можете использовать число с плавающей запятой в цикле, но тогда вам нужно учитывать неточную природу чисел с плавающей запятой. Убедитесь, что вы используете конечный интервал, наподобие середины последнего номера, который вы хотите, и следующего.
double negSum = 0.0, posSum = 0.0;
for (double number = -2.3; number < 3.1; number += 0.4) {
if (number < 0) {
negSum += number;
} else {
posSum += number;
}
}
Кроме того, при многократном накоплении чисел с плавающей запятой (например, добавление 0,4 снова и снова) вы также накапливаете ошибки округления. Большинство чисел не могут быть представлены точно как числа с плавающей запятой, поэтому, скорее всего, вы добавляете что-то вроде 0.3999999999999994225 вместо 0,4 на каждую итерацию. Маловероятно, что в этом небольшом примере сложится что-то, чего достаточно, но вы должны знать об этом эффекте, чтобы можно было ожидать его в ситуациях с большим количеством цифр.