Неожиданные результаты в арифметике с плавающей запятой и приведении типов в C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Неожиданные результаты в арифметике с плавающей запятой и приведении типов в C#

Сообщение Anonymous »

Я столкнулся с неожиданным поведением в моем коде C#, связанным с арифметикой с плавающей запятой и приведением типов к целым числам. Вот упрощенная версия кода:

Код: Выделить всё

static void Main(string[] args)
{
int d0 = (int)(2.300000000000001 * 100D);
int d1 = (int)(2.3000 * 100D);
Console.WriteLine(d0);
Console.WriteLine(d1);
return;
}

В этом коде d0 и d1 присваиваются результат умножения с плавающей запятой, приведённый к целому числу.
Ожидаемый результат для обоих d0 и d1 должны быть 230. Однако, хотя d0 правильно оценивает 230, d1 неожиданно дает 229.
Я понимаю, что арифметика с плавающей запятой иногда может вносить небольшие ошибки из-за ограничений точности. , но я не могу объяснить, почему d1 дает 229. Может ли кто-нибудь помочь разъяснить, почему это может происходить и как решить эту проблему, чтобы получить ожидаемый результат 230 для d1?
Изображение


Подробнее здесь: https://stackoverflow.com/questions/784 ... ypecasting
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»