Считывание значения 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д