«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Двойное умножение сломано в .net?

Двойное умножение сломано в .net?

Опубликовано в 2025-02-06
Просматривать:783

Is Double Multiplication Broken in .NET?

подробное объяснение задачи точности размножения двойной точности в .NET

]

в C#, результат выражения Double i = 10 * 0,69; является то, что i назначено значение 6,8999999999999999999999999999999995, а не ожидаемых 6.9. Это поднимает вопрос: есть ли ошибка в двойной точке умножения в .net?

двоичное представление и операция плавающей запятой

]]]

Чтобы понять это поведение, вы должны иметь глубокое понимание тонкостей двоичных представлений и операций с плавающей запятой. Форматы с плавающей запятой приблизительно представляют собой реальные числа как конечные бинарные значения, что может привести к точным ограничениям.

, казалось бы, простой 0,69 не может быть точно представлен в двоичном. Это требует бесконечной петли бинарных чисел. Двоичное представление, хранящееся в типе данных double , является приблизительным значением 0,69.

константы оптимизированы и хранятся компилятором

]]]

В приведенном фрагменте кода компилятор оптимизирует выражение, выполняя умножение и сохраняя результат в качестве постоянной в исполняемом файле. Это происходит потому, что эти значения известны во время компиляции. Хранитованное значение представляет собой приближение с плавающей запятой 6,9, которое немного меньше фактического значения.

решения и альтернативные типы данных

]]

Чтобы решить эту проблему и получить более точные результаты, можно использовать более точные результаты Decimal тип данных, который предназначен для представления неконтролируемых десятичных значений с более высокой точностью. Выражение Decimal i = 10m * 0,69m; даст результат 6,9 м.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3