Вы можете
- Предварительно выделить массив, если вы знаете, что будут содержать ровно 100 элементов, используя
var xr_arr = new double[100];
В качестве альтернативы, если вы не знаете точное количество элементов первоначальных , вы можете использовать List<double>
, чтобы добавить новый номер.
- Подождите с попыткой распечатать значения до тех пор, пока вы не добавите их.
Так что это нравится:
static void xn()
{
double r = 3.9;
var n = 0;
// I think the number of elements could (theoretically) be different from 100
// and you could get an IndexOutOufRangeException if it is 101.
var increment = 0.01d; // 1.0d/300.0d; // <== try this.
var n_expected = 100; // 300 // <= with this.
var x_arr = new double[n_expected];
// alternative: if you cannot be absolutely certain about the number of elements.
//var x_list = new List<double>();
for (double x = 0; x <= 1; x += increment)
{
double xr = r * x * (1 - x);
x_arr[n++] = xr;
// x_list.Add(xr); // alternative.
}
for (int y = 0; y <23; y++)
{
Console.WriteLine(xr_arr[y]);
// Console.WriteLine(xr_list[y]); // alternative.
}
}
с плавающей точкой точностью проблема
Обратите внимание, что, в отличие от общего ожидания, значение с плавающей точкой по-прежнему хранится в ограниченном количестве бит, и поэтому, при условии разрешения и эффекта округления, вы теряете точность, если выполняете операции, такие как сложение, в цикле. Ошибочно полагать, что реальные числа работают одинаково на компьютере, как в чистой математике. Пожалуйста, посмотрите на what every computer scientist should know about floating point arithmetic и на статью, на которую она ссылается.
В этом примере, если вы увеличили на 1.0/300, ожидая получить 300 элементов, у вас возникла бы проблема.
Вашего 'xr_arr' имеет только 1 значение .. – adricadar
Рассмотрит более именование ваших методов стали переменными – khlr