Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 56
.NET Core

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

17.05.2022, 16:52. Показов 1444. Ответов 13

Студворк — интернет-сервис помощи студентам
Здравствуйте вопрос таков, при вводе значения n == 10 У меня правильные значения А при N== 100 нет
пытаюсь реализовать это формулу 1!/1 + 2!/(1+1/2) + 3!/(1+1/2+1/3) + ... + 1*2*...* n/ (1+1/2+1/3+...+1/n)
все не как не могу понять как можно ли это решить вот тест который должент пройти

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        [TestCase(6, 363.55835615201624)]
        [TestCase(10, 1384350.0519936203)]
        [TestCase(100, 1.8173121424936406E+157)]
        public void GetSumSixTests(int n, double expected)
        {
            Assert.AreEqual(expected, Calculator.GetSumSix(n), double.Epsilon);
        }
 
     public static double GetSumSix(int n)
        {
            double sum = 0;
            for (int i = 1; i <= n; i++)
            {
                sum += MyFact(i) / GetSumOne(i);
            }
 
            return sum;
        }
 
        public static double MyFact(double pow)
        {
            double result = pow;
            while (pow > 1)
            {
                result *= --pow;
            }
 
            return result;
        }
        public static double GetSumOne(int n)
        {
            double sum = 0;
            for (double i = 1; i <= n; i++)
            {
               sum += 1 / i;
            }
 
            return sum;
        }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2022, 16:52
Ответы с готовыми решениями:

Сложение двоичных, с плавающей запятой
Целю следующая: составить программу для сложения двоичных чисел с плавающей запятой. В случае ввода не двоичного числа, должна выдаваться...

Сравнение чисел с плавающей запятой с точностью
Добрый день. Стоит задача сравнить частное двух чисел с числом Pi. Но максимальное значение которому равно частное в диапазоне от 0-100000...

Операции над числами с плавающей запятой
НЕ получается осуществить операции над числами с плавающей запятой. С целыми числами все нормально. class Program { public...

13
56 / 39 / 20
Регистрация: 11.06.2021
Сообщений: 154
17.05.2022, 17:02
У меня по вашему коду при 100 выдало 1,8173121424936422E+157. Все верно.
0
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
17.05.2022, 17:03
а что такое Assert, что такое Calculator?
0
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 56
17.05.2022, 17:09  [ТС]
Добавлено через 3 минуты
filh, нет у вас ответ не верный(как и у меня) смотрите на последние цифры 1,8173121424936422E+157. и 1.8173121424936406E+157
0
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
17.05.2022, 17:22
filh, нет у вас ответ не верный(как и у меня) смотрите на последние цифры 1,8173121424936422E+157. и 1.8173121424936406E+157
как был получен верный ответ?
0
56 / 39 / 20
Регистрация: 11.06.2021
Сообщений: 154
17.05.2022, 17:23
MatBeyKa, через рекурсию выдает верное значение:
C#
1
2
3
4
5
6
7
        public static double MyFact(int n)
        {
            if (n == 0)
                return 1.0;
            else
                return n * Fact(n - 1);
        }
1
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 56
17.05.2022, 17:24  [ТС]
это задания с EPAM тест кейсы верны всегда и поэтому сомнения только в моем коде
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
17.05.2022, 17:29
Лучший ответ Сообщение было отмечено MatBeyKa как решение

Решение

MatBeyKa, попробуйте использовать только одну функцию у меня:
C++
1
2
3
4
5
6
7
8
9
10
11
        static double foo(int n)
        {
            double fac = 1.0, sum = 0.0, res = 0.0;
            for (int i = 1; i <= n; i++)
            {
                fac *= i;
                sum += 1.0 / i;
                res += fac / sum;
            }
            return res;
        }
Цитата Сообщение от MatBeyKa Посмотреть сообщение
смотрите на последние цифры 1,8173121424936422E+157. и 1.8173121424936406E+157
Для типа double количество смысленных цифр примерно будет 14 или 15 первых цифр, поэтому после них это будет бесмысленными цифрами, и может быть они созданы случайнами !

----------------------
Вот полный код, попробуйте:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
namespace Task2
{
    class Program
    {
        static double foo(int n)
        {
            double fac = 1.0, sum = 0.0, res = 0.0;
            for (int i = 1; i <= n; i++)
            {
                fac *= i;
                sum += 1.0 / i;
                res += fac / sum;
            }
            return res;
        }
        static void Main(string[] args)
        {
            Console.Write("n = ");
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine($"\nResult: {foo(n)}");
            Console.ReadLine();
        }
    }
}
1
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 56
17.05.2022, 17:32  [ТС]
извиняюсь не совсем понимаю чему равен fact
0
56 / 39 / 20
Регистрация: 11.06.2021
Сообщений: 154
17.05.2022, 17:34
Volga_, стало интересно, заметил, что если цикл от 1 до n, ответ правильный, при обратном от n до 1 - неверный.

Добавлено через 1 минуту
Цитата Сообщение от MatBeyKa Посмотреть сообщение
чему равен fact
там MyFact(n - 1);
1
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
17.05.2022, 17:36
Цитата Сообщение от MatBeyKa Посмотреть сообщение
извиняюсь не совсем понимаю чему равен fact
fac в моем коде это ФАКТОРИАЛ (1!; 2!; 3!;...; n!).
Цитата Сообщение от filh Посмотреть сообщение
при обратном от n до 1 - неверный
Не понял что вы хотите показывать ? Откуда это ? И зачем ?
0
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 56
17.05.2022, 17:36  [ТС]
звучит интересно) получается что я убил около 5ч на перестановку сравнения))))
0
56 / 39 / 20
Регистрация: 11.06.2021
Сообщений: 154
17.05.2022, 18:17
Цитата Сообщение от Volga_ Посмотреть сообщение
Не понял что вы хотите показывать ? Откуда это ? И зачем ?
Мне просто стало интересно, разные ответы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        static void Main(string[] args)
        {
            Console.WriteLine(Fact1(100));
            Console.WriteLine(Fact2(100));
        }
 
        public static double Fact1(int n)
        {
            double result = 1.0;
            for (int i = 1; i <= n; i++)
            {
                result *= i;
            }
            return result;
        }
 
        public static double Fact2(int n)
        {
            double result = 1.0;
            for(int i = n; i > 0; i--)
            {
                result *= i;
            }
            return result;
        }
вывод результата:
Code
1
2
9,33262154439441E+157
9,332621544394418E+157
Вот тут не совсем понятно. Разный ответ.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16142 / 11265 / 2888
Регистрация: 21.04.2018
Сообщений: 33,126
Записей в блоге: 2
17.05.2022, 18:52
Цитата Сообщение от MatBeyKa Посмотреть сообщение
все не как не могу понять как можно ли это решить вот тест который должент пройти
Для уменьшения ошибок округление суммирование ряда double должно производиться по отсортированным по модулю числам - от меньших к большим.
В вашей задаче такая сортировка получится если вы будете запускать цикл от n к 1.

Добавлено через 3 минуты
Цитата Сообщение от filh Посмотреть сообщение
стало интересно, заметил, что если цикл от 1 до n, ответ правильный, при обратном от n до 1 - неверный.
Может я ошибся в оценке членов ряда, но мне кажется должно получиться по иному.

Добавлено через 12 минут
Цитата Сообщение от filh Посмотреть сообщение
вывод результата:
Code
1
2
9,33262154439441E+157
9,332621544394418E+157
Для BigInteger:
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000.
С привидением к double 9,332621544394415E+157.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2022, 18:52
Помогаю со студенческими работами здесь

Хранение чисел с плавающей запятой в памяти
Здравствуйте. Скорее, вопрос не по теме, просто не знаю, куда задать вопрос. Вопрос связан с хранение чисел с плавающей запятой. Ответьте...

ProgressBar зависимый от переменной с плавающей запятой(double)
Хочу сделать прогресс бар зависимый от переменной с плавающей запятой(double), прогресс бар будет зависеть от жизней персонажа.Прошу,...

Каким образом число с плавающей запятой разделить на целое?
Не могу разобраться, как мне число с плавающей запятой, которое записано в строковую переменную. Перевести в дробное значение и затем...

Тип decimal тоже с плавающей запятой, каково отличие от double?
Float и double представляются в памяти согласно IEEE 754? Что значит плавающая запятая? Как в памяти представляются числа decimal?

Перевод числа с плавающей запятой из одной системы счисления в другую
Как организовать перевод числа из одной системы счисления в другую при условии что числа с плавающей запятой. С целыми числами всё просто,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru