Считывание значения Double из .txt файла - C#
Формулировка задачи:
Доброго времени суток.При работе с очень большими числами столкнулся с такой проблемой, что при считывании числа из текстового документа в переменную типа double не происходит округления до ближайшего целого, а при подсчёте этого же числа округление происходит. Из-за этого становится невозможным сравнение этих чисел. Подскажите, можно ли это исправить?Число:61850783159066
static void Main(string[] args)
{
double a = 0;
double b = 1;
bool tf = true;
int colvo = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < colvo; i++)
{
if (tf == true)
{
a = a + b;
tf = false;
}
else
{
b = b + a;
tf = true;
}
}
double z = Convert.ToDouble(File.ReadAllText("data.txt"));
if (tf != true)
{
Console.WriteLine("F = {0}\nZ = {1}",b,z);
}
else
{
Console.WriteLine("F = {0}\nZ = {1}",a,z);
}
Console.ReadKey();
}7
69282123... (661 число Фибоначчи) Подсчёт:6,18507831590667
Е+137 Читает из файла: 6,18507831590668
Е+137 Спасибо!Решение задачи: «Считывание значения Double из .txt файла»
textual
Листинг программы
using System;
using IntXLib;
namespace ConsoleApplicationZ
{
class Program
{
struct mtx2x2
{
public IntX _11, _12, _21, _22;
public static mtx2x2 operator *(mtx2x2 lhs, mtx2x2 rhs)
{
var m = MultiplyMode.Classic;
return new mtx2x2
{
_11 = IntX.Multiply(lhs._11 ?? 0 , rhs._11 ?? 0, m ) + IntX.Multiply(lhs._12 ?? 0 , rhs._21 ?? 0, m),
_12 = IntX.Multiply(lhs._11 ?? 0 , rhs._12 ?? 0, m) + IntX.Multiply(lhs._12 ?? 0 , rhs._22??0, m),
_21 = IntX.Multiply(lhs._21 ?? 0 , rhs._11 ?? 0, m) + IntX.Multiply(lhs._22 ?? 0 , rhs._21 ?? 0, m),
_22 = IntX.Multiply(lhs._21 ?? 0 , rhs._12 ?? 0, m) + IntX.Multiply(lhs._22 ?? 0 , rhs._22 ?? 0, m)
};
}
}
private static readonly mtx2x2 fibMtx = new mtx2x2 { _11 = 1, _12 = 1, _21 = 1 };
private static readonly mtx2x2 identity = new mtx2x2 { _11 = 1, _22 = 1 };
static mtx2x2 IntPower(mtx2x2 x, short power)
{
if (power == 0) return identity;
if (power == 1) return x;
IntX n = 15;
while ((power <<= 1) >= 0) n--;
mtx2x2 tmp = x;
while (--n > 0)
tmp = (tmp * tmp) * (((power <<= 1) < 0) ? x : identity);
return tmp;
}
static IntX fibm(short n)
{
return IntPower(fibMtx, (short)(n - 1))._11;
}
static void Main()
{
IntX x= IntX.Parse("618507831590667692821237486561501624247987096016405159341685528690027641831713576510376480847184844186265198694299457590099717052512641561");
Console.WriteLine(x+Environment.NewLine+Environment.NewLine);
Console.WriteLine(fibm(661));
Console.ReadKey();
}
}
}