Я внедряю метод Berechnecosinus (float x, int ordnung) в Java, который должен аппроксимировать косинус X, используя серию Taylor до указанного порядка. /> Вот что у меня есть до сих пор: < /p>
public class Taylor {
public float berechneFak(float x) {
if (x 0) {
term *= -x * x / ((n - 1) * n);
}
summe += term;
}
return summe;
}
}
< /code>
Это назначение: < /p>
public class Taylor {
public float berechneFak(float x) {
// insert code here!
// drandenken: Vorlesung!
return 0.0f;
}
public float berechneCosinus(float x, int ordnung) {
float acc = 0.0f;
// Ihr Code hierher!
return acc;
}
}
< /code>
Тестовый случай: < /p>
< /p>
weaded /prete: < /p>
i реализовал метод расчета косинуса с использованием серии Тейлора и нормализовал x в интервал [-π, π]. Однако результаты немного отличаются от ожидаемых значений в некоторых тестовых случаях. Поскольку мне не разрешено изменять подписи метода и могу работать только с поплавками, я ищу советы о том, как повысить точность.public class Taylor {
public float berechneCosinus(float x, int ordnung) {
if (ordnung == 0) return 0.0f;
float sum = 0.0f;
float term = 1.0f;
for (int i = 0; i < (ordnung + 1) / 2; i++) {
int n = 2 * i;
if (i > 0)
term *= -x * x / ((n - 1) * n);
sum += term;
}
return sum;
}
public static void main(String[] args) {
Taylor t = new Taylor();
float x = 3.14159265f; // approx. PI
System.out.printf("%.6f\n", t.berechneCosinus(x, 13));
System.out.printf("%.6f\n", t.berechneCosinus(x, 14));
}
}
< /code>
Фактический вывод: < /p>
-0.999900
-0.999900
< /code>
ожидаемый вывод должен быть: < /p>
-0.999899
-0.999899
< /code>
Я знаю об ограничениях с плавающей запятой; Проблема в том, что тесты проверяют ровно -0,999899. Мне интересно, возможно ли реструктурировать расчет, чтобы получить ожидаемый результат. Тем не менее, я собираюсь спросить моего профессора. Также может быть возможно, что в коде тестирования есть ошибка/ошибка. Я ценю все усилия, которые вы, ребята, сделали до сих пор. Я спросил своего профессора сегодня, и он дал мне подсказку, поэтому я получил ответ.public class Taylor {
public float berechneFak(float x) {
float produkt = 1.0f;
for (int i = 2; i
Подробнее здесь: https://stackoverflow.com/questions/796 ... sing-float