Почему мантисса чисел начинает куда-то ехать?
Задание было очень простое: параметр а меняет значения от 1.25 до 2 с шагом 0.25, а x от -2 до 2 с шагом 0.1. В файле с результатами ужас какой-то... Все дело в представлении чисел, но как исправить-не знаю.
using System;
using System.Collections.Generic;
using System.IO;
namespace тимп_1._2_часть_2
{
class Program
{
static void Main(string[] args)
{
StreamWriter p = new StreamWriter("rez.txt");
float a, x, y2;
p.WriteLine(" РЕЗУЛЬТАТЫ РАСЧЕТА");
for (a=1; a<=2; a +=0.25f)
{
p.WriteLine(" а= " + a);
for (x = -2; x <= 2; x += 0.1f)
{
y2 = (float)((1 - Math.E* ((-1) * Math.Pow((x / a), 2))) / a);
p.WriteLine(" x= " + x + '\t' + " y= " + y2);
}
}
p.Close();
}
}
}
мы учимся делать вложенные циклы, в файле просто выводятся значение a, потом все значения х и по формуле считается y во вложенном циклае и так для каждого увеличения а. Мы смотрим на результаты в файле, но у меня они там неровные какие-то, например: вместо х=1,7 после очередной итерации получается число 1,6999999, а не 1,7, и, соответвенно, значения y тоже кривые...
для а=1 x= -1,8 y= 9,807233, а вот при том же а: x= -1,699997 y= 8,855834, а x по циклу должен быть 1,7
Ответы (1 шт):
ToStringотформатирует число (ссылка).PadLeftсделает нужный отступ (ссылка).- Учитесь сразу правильно работать с
IDisposableобъектами, которым являетсяStreamWriter- using. - Интерполяция строк позволяет удобнее форматировать строки, делает код короче.
using StreamWriter sw = new StreamWriter("rez.txt");
sw.WriteLine("РЕЗУЛЬТАТЫ РАСЧЕТА");
for (float a = 1; a <= 2; a += 0.25f)
{
sw.WriteLine("а = " + a);
for (float x = -2; x <= 2; x += 0.1f)
{
float y = (1 + MathF.E * MathF.Pow(x / a, 2)) / a;
sw.WriteLine($"x = {x,4:F1} y = {y,4:F1}");
//sw.WriteLine("x = " + x.ToString("F1").PadLeft(4) + " y = " + y.ToString("F1").PadLeft(4));
}
}
Вывод в файл
РЕЗУЛЬТАТЫ РАСЧЕТА
а = 1
x = -2,0 y = 11,9
x = -1,9 y = 10,8
x = -1,8 y = 9,8
x = -1,7 y = 8,9
x = -1,6 y = 8,0
x = -1,5 y = 7,1
x = -1,4 y = 6,3
x = -1,3 y = 5,6
x = -1,2 y = 4,9
x = -1,1 y = 4,3
...