Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 29
1
.NET 2.x

Дикие округления при математических рассчетах

16.02.2011, 15:29. Показов 2142. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется такой вот код:
C#
1
2
3
4
5
6
decimal i = 0;
            int n = 3;
            for(int m = 1; m <= n; m++) {
                i += Convert.ToDecimal(1/Math.Pow(m, 1/2));
            }
            disp.Text = Convert.ToString(i);
Проблема в том, что происходит очень большое округление (до целых, даже в разрез с математикой. иногда на других формулах/значениях не происходит такое.). В данном случае (n = 3) программа выведет 3, хотя в действительности результат 2.28... (считал на инженерском калькуляторе).

При дебаге с каждой итерацией цикла переменная i увеличивается строго на 1. Что за фокусы такие в .NET?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2011, 15:29
Ответы с готовыми решениями:

Неточности округления при разделении числа на целую и дробную часть
double num, fractional; int integral; double.TryParse(textBox1.Text, out...

Реализация округления при делении
Здравствуйте! Подскажите, пожалуйста, какой командой нужно выполнить деление, чтобы округление...

Устранение округления при вычислении площади
Форма 3 поля ширина длинна и количество сторон считаю полщадь в отчете Проблема токов одном при...

Ошибка округления при использовании float или double
Да-да, избитая тема. Понятно, что любое нецелое число может быть представленно в современных...

3
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
16.02.2011, 15:51 2
Ticksy, Вы понимаете разницу между целыми типами и типами с плавающей точкой? Какие будут результаты при делении 1 на 2 типа Int32 (целый тип), и какой результат если тип будет хотя-бы Double (тип с плавающей точкой).

Ответьте про себя, а потом смотрите
ответ.

1) 0 - т.к. целый тип не может содержать запятой, и число будет округлено (т.е дает целую часть от деления).
2) 0.5 - а тут без проблем.
C#
1
2
3
4
5
6
            decimal i = 0;
            int n = 3;
            for (int m = 1; m <= n; m++) {
                i += Convert.ToDecimal(1d / Math.Pow(m, 1d / 2d));
            }
            disp.Text = i.ToString();
Читайте книжки
1
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 29
16.02.2011, 16:05  [ТС] 3
Цитата Сообщение от SSTREGG Посмотреть сообщение
понимаете разницу между целыми типами и типами с плавающей точкой?
Понимаю...

Цитата Сообщение от SSTREGG Посмотреть сообщение
Какие будут результаты при делении 1 на 2 типа Int32 (целый тип), и какой результат если тип будет хотя-бы Double (тип с плавающей точкой).
Как тогда производить деление, чтобы результат оказывался в double? Приписывать в конце числа первую букву его типа (судя по примеру) или писать типа 1.0/2.0? Хотя в данном случае можно указать 0.5 (это я для удобства так записал...).

Ох уж эта моя логика после PHP... (там нет строгой типизации).
0
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
16.02.2011, 16:11 4
Цитата Сообщение от Ticksy Посмотреть сообщение
или писать типа 1.0/2.0
Можно так, можно через литерал (1d, 2d, 3d, ... )) Если в числе есть точка, то оно по умолчанию считается типом double.

Для float (4 байта): 1.0f, 1f, 2.5f, 2f, ...
Для double (8 байт): 1.0, 1d, 2.5, 2d, ...
Для decimal (16 байт): 1.0m, 1m, 2.5m, 2m, ...

Буквы могут быть как строчными так и заглавными.
Цитата Сообщение от Ticksy Посмотреть сообщение
Ох уж эта моя логика после PHP...
Почитайте книжки.
1
16.02.2011, 16:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2011, 16:11
Помогаю со студенческими работами здесь

Дикие шумы в сеть от 852D+
Добрый день. С пол года назад купил себе вышеозначенную станцию, и все было просто замечательно,...

Дикие артефакты на новом компьютере
Доброго времени суток. Прошу помочь в решении проблемы. Собрал новый системный блок: -материнская...

Дикие невыносимые лаги на новом компе
Здравствуйте. Примерно два месяца назад купил новый комп. т.х. : опера - 4 гига gigabyte...

Asus X53S Начались дикие лаги
Такая проблемка. ФПС просто ужасен около 6-7. Все было нормально, перезагрузил. Начались дикие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru