Одна проблема заключается в коде (1 / 64)
... потому что вы поместили это выражение в скобки. Таким образом, это целое деление и, как таковое, всегда будет иметь значение ноль .
Попробуйте вместо этого:
dataPoints[l] = (PI / 16) * sin (6.036 * k) + (1.0 / 64) * PI * cos (24.44 * k);
Существует также проблема в том, как вы выразили условие 'test' в своем for
l oop - оператор запятой здесь будет эффективно игнорировать первая часть выражения:
for (k = min, l = 0; l < POINTS, k <= max; l++, k += increment)
В целях безопасности, когда вы хотите проверить оба условия, используйте оператор &&
:
for (k = min, l = 0; l < POINTS && k <= max; l++, k += increment) {
Наконец Ваш актуальный вопрос:
Кажется, есть некоторая проблема, когда k = 0 в для l oop. Он возвращает значение мусора.
Нет, это не так! Операции с плавающей запятой, которые вы выполняете с переменной k
(т. Е. k += increment
, для каждого l oop), не точны: то, что вы думаете, будет 0.4 + (-0.4)
, будет на самом деле будет 'nearly' '0.4' - 'nearly' '0.4'
; таким образом, значение, которое вы получаете (моя система дает -5.55112e-16
), является «разумным приближением» к нулю, учитывая диапазоны чисел, которые вы использовали (и накопленные «ошибки» в предыдущих циклах).
Не стесняйтесь просить дальнейших разъяснений и / или объяснений.