Мне нужно поработать с переменными типа double и в расчетах я наткнулся на кое-что непонятное. Я знаю, что типы с плавающей запятой не точны, но у них достаточно точности для того, что мне нужно.
Сначала я умножаю значение 200 на множитель 1,1 и получаю 220,00000000000003, что ожидаемо и достаточно близко к 220. > а затем я вычитаю это из ожидаемого значения (220). Результат должен быть 0 или очень близким к 0. Вместо этого я получаю -2.8421709430404007E-14, что я не могу объяснить.
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
double u = 200;
double v = 1.1;
double x = u * v;
double y = 220;
double z = y - x;
Console.WriteLine(u + " * " + v + " = " + x);
Console.WriteLine(y + " - " + x + " = " + z);
Console.ReadLine();
}
}
}
Любые идеи?
-2.8421709430404007E-14
близко к нулю (т.е. переместите десятичный разряд 14 раз влево). - person crashmstr   schedule 27.10.2015-2.84 * 10 ^ -14
. очень близко. дополнительная информация о научной нотации - person M.kazem Akhgary   schedule 27.10.2015-0.00000000000003
- person crashmstr   schedule 27.10.2015