Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/56: Рейтинг темы: голосов - 56, средняя оценка - 4.96
21 / 21 / 7
Регистрация: 24.01.2013
Сообщений: 129

Число е

08.03.2013, 22:10. Показов 11989. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите решить задачу: Найти число е с очень большой точностью(хотя бы дойти до 100!).Вот написал программу:
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
class Program
    {
        public static double d = 0;
        static void Main(string[] args)
        {
            decimal e = 0;
            for (int i = 0; i < 28; i++)
            {
                Console.WriteLine(e);
                e += 1 / Factorial(i);
            }
           
            Console.WriteLine(e.ToString());
 
            Console.ReadLine();
        }
 
        public static decimal Factorial(int n)
        {
            decimal res = 1;
            for (int i = 2; i <= n; i++)
            {
                res *= i;
            }
            return res;
        }
 
        
    }
Но она больше 27! не выдерживает.Можно как-то "проапгрейдить" прогу для чисел побольше?И можно ли сделать аналог для бесконечности?
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2013, 22:10
Ответы с готовыми решениями:

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д.
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. ...

Сколько существует программ, которые число a преобразуют в число b,а затем это число преобразуют в число c
Нужно написать общую программу,решающую задачу. У исполнителя две команды, которым присвоены номера: Прибавить 1 Умножить на 2 ...

Дано натуральное число n. Создать новое число, которое получается написав число обратным порядком
Например, если дано 3578, то получится 8753. Есть такой вариант, но нужно короче... ВАЖНО Нужно именно создать новое число, а не...

25
168 / 107 / 30
Регистрация: 19.01.2013
Сообщений: 849
08.03.2013, 22:28
а почему нельзя кароче взять статическое число е и тупа на ктонсоль вывести^_^)

Добавлено через 1 минуту
Цитата Сообщение от grom_oleg Посмотреть сообщение
for (int i = 0; i < 28; i++)
Я ещё прогу не понял до конца , но походу у тебя же 28 стоит как он долже считать до 100 если 28 стоит. Походу поэтому на 28 и запинается. 27 считает, а 28 уже нет^_^.

Добавлено через 2 минуты
а можно коментарии построчные для меня написать? ^_^.

Добавлено через 24 секунды
Цитата Сообщение от grom_oleg Посмотреть сообщение
public static decimal Factorial(int n)
{
decimal res = 1;
for (int i = 2; i <= n; i++)
{
res *= i;
}
return res;
}
}
А это вообще зачем?
0
21 / 21 / 7
Регистрация: 24.01.2013
Сообщений: 129
08.03.2013, 22:37  [ТС]
я поставил 28 потому что при больше идет крах
по поводу статического числа е там очень маленькая точность мне же нужно как минимум 1000 знаков после запятой и больше
1
168 / 107 / 30
Регистрация: 19.01.2013
Сообщений: 849
08.03.2013, 22:54
А я кароче понял походу. Плиз распиши прогу, а то такому нуюу непонятно.
ТЫ конечно же правильно написал прогу, хотя я всё равно не понимаю почему 28. Но придел-то самой переменной 28 или 30 символов! конечно же ты тупа вылезаешь за допустимые пределы переменной.

Добавлено через 56 секунд
Надо в массив переделывать как-то , но это наврят -ли поможет(((

Добавлено через 4 минуты
я кароче незнаю это ты тут гений, но надо схитрить. Я бы хотя-бы сделал так:
на консоле пишется "2"+переменная. Эта переменная имеет тип uiong или лонг неважно. и она и будет твоя дробная часть.

Добавлено через 13 секунд
А то ошибка

Добавлено через 9 минут
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
namespace ConsoleApplication2
{
    class Program
    {
        public static double d = 0;
        static void Main(string[] args)
        {
            double e = 0;
            ulong h =10000000000000000000;
            ulong o = 101;
            for (ulong i = 0; i < o; i++)
            {
                Console.WriteLine(e);
                e += (1+h)/ Factorial(i);
                
           
            }
 
            Console.WriteLine(e.ToString());
 
            Console.ReadLine();
        }
 
        public static double Factorial(ulong n)
        {
            double res = 1;
            for (ulong i = 2; i <= n; i++)
            {
                res *= i;
            }
            return res;
        }
 
 
    }
}
Но даже ulong недостаточно(((.
Наверное надо как массив первые числа забирать. Они всё равно не изменяются. Но как это сделать я незнаю да и поздно уже(((.
0
21 / 21 / 7
Регистрация: 24.01.2013
Сообщений: 129
08.03.2013, 22:55  [ТС]
не вариант факториал тоже вылезет за пределы и тут естественно ни массив ни переменная не поможет нужна какая-то очень резиновая переменная
1
168 / 107 / 30
Регистрация: 19.01.2013
Сообщений: 849
08.03.2013, 23:03
Ну это тип string или массив походу по другому ни как. Надо разбивать скажем на 15 символов в них считать ну по биному ньютона записывать скажем в 0-ую ячейку потом считать следующие 15 и записывать в 1-ую ячейку и т.д. потом на консоль выводить.
Значение не поменяется потому , что числа малентькие( да и препод не заметит).
0
21 / 21 / 7
Регистрация: 24.01.2013
Сообщений: 129
09.03.2013, 00:17  [ТС]
а как тогда делить строку или массив
п.с. прога для себя а не зачета или экзамена)
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
09.03.2013, 01:06
Вот сюда вам уже кидали ссылку в предыдущей теме, инфа оттуда не подошла? Почему, если не секрет?
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
09.03.2013, 01:40
Цитата Сообщение от grom_oleg Посмотреть сообщение
а как тогда делить строку или массив
п.с. прога для себя а не зачета или экзамена)
я одно не могу понять, зачем Вы в дом через стену пытаетесь войти, есть же дверь??? Есть такая замечательная вещь теория рядов, вот берите оттуда ряд Тейлора и считайте хоть до 10000000000 знаков после запятой, хотя на это нужно время и не малое, а если вам нужно просто число, то берите mathlab, а ещё лучше erlang, он !10000 за доли секунды считает
0
 Аватар для AlexAsche
78 / 78 / 15
Регистрация: 27.01.2013
Сообщений: 323
09.03.2013, 13:54
Лучший ответ Сообщение было отмечено как решение

Решение

Очень простой вариант: скачать эту библиотеку длинной арифметики вещественных чисел производной длины, добавить ссылку на dll в свой проект и пользоваться:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using W3b.Sine;
 
        public static void E()
        {
            BigNum approximatFunction = 2;//дробная часть
            uint countSummand = 100; //кол-во слагаемых в выражении
            BigNum factorial = 1;
            
            for(int i=2; i < countSummand; i++)
            {
                    factorial = factorial * i;
                    approximatFunction += 1 / factorial; 
            }
            Console.WriteLine("Приближенное зн-е константы: {0}",approximatFunction.ToString());
       }
3
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.03.2013, 14:16
AlexAsche, вот чорт, а я свою начал велосипедить
Ладно, раз уж все равно бесполезно дальше делать, скину что уже есть:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
    class BigFloat
    {
        #region Equality and ToString
 
        private readonly object id = new object();
        protected bool Equals(BigFloat other)
        {
            return @base.Equals(other.@base) && exponent.Equals(other.exponent);
        }
 
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if (obj.GetType() != GetType()) return false;
            return Equals((BigFloat) obj);
        }
 
        public override int GetHashCode()
        {
            unchecked
            {
                return id.GetHashCode();
            }
        }
 
        public static bool operator ==(BigFloat one, BigFloat other)
        {
            if (ReferenceEquals(one, null))
                return false;
            return one.Equals(other);
        }
 
        public static bool operator !=(BigFloat one, BigFloat other)
        {
            return !(one == other);
        }
 
        public static bool operator <(BigFloat one, BigFloat other)
        {
            return one.@base < other.@base || one.exponent < other.exponent;
        }
 
        public static bool operator >(BigFloat one, BigFloat other)
        {
            return one != other && !(one < other);
        }
 
        public override string ToString()
        {
            if (exponent == 0)
                return @base.ToString();
            return @base + "E" + (exponent >= 0 ? "+" : "") + exponent;
        }
 
        #endregion
        
        private BigInteger @base, exponent;
 
        public BigFloat(BigInteger @base, BigInteger exponent)
        {
            this.@base = @base;
            this.exponent = exponent;
        }
 
        public BigFloat(BigFloat f) : this(f.@base,f.exponent)
        {}
 
        public BigFloat Clone()
        {
            return new BigFloat(this);
        }
 
        public static BigFloat operator -(BigFloat f)
        {
            return new BigFloat(-f.@base, f.exponent);
        }
 
        public static BigFloat operator +(BigFloat one, BigFloat other)
        {
            var onecopy = one.Clone();
            var othercopy = other.Clone();
            while (onecopy.exponent > othercopy.exponent)
            {
                onecopy.exponent--;
                onecopy.@base *= 10;
            }
            while (othercopy.exponent > onecopy.exponent)
            {
                othercopy.exponent--;
                othercopy.@base *= 10;
            }
            return new BigFloat(onecopy.@base + othercopy.@base, onecopy.exponent).Fix();
        }
 
        public static BigFloat operator -(BigFloat one, BigFloat other)
        {
            return one + (-other);
        }
 
        private BigFloat Fix()
        {
            if (@base.IsZero)
                return new BigFloat(0, 0);
            while (@base%10==0)
            {
                @base /= 10;
                exponent++;
            }
            return this;
        }
 
        public static BigFloat operator *(BigFloat one, BigFloat other)
        {
            return new BigFloat(one.@base*other.@base, one.exponent + other.exponent).Fix();
        }
 
        public static BigFloat operator /(BigFloat one, BigFloat other)
        {
            throw new Exception();
        }
 
        private static BigInteger PowN(int x, uint pow)
        {
            BigInteger result = 1;
            for (int i = 0; i < pow; i++)
                result *= x;
            return result;
        }
    }
1
 Аватар для AlexAsche
78 / 78 / 15
Регистрация: 27.01.2013
Сообщений: 323
09.03.2013, 15:15
Psilon, Да я только сегодня про эту библиотеку вспомнил. Т.к. понял, что поделить объекты типа BigInteger и получить дробную часть видимо требует значительных усилий.
0
21 / 21 / 7
Регистрация: 24.01.2013
Сообщений: 129
09.03.2013, 17:39  [ТС]
спасибо большое всем, кто откликнулся)
0
21 / 21 / 7
Регистрация: 24.01.2013
Сообщений: 129
09.03.2013, 17:57  [ТС]
Цитата Сообщение от AlexAsche Посмотреть сообщение
Очень простой вариант: скачать эту библиотеку длинной арифметики вещественных чисел производной длины, добавить ссылку на dll в свой проект и пользоваться:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using W3b.Sine;
 
        public static void E()
        {
            BigNum approximatFunction = 2;//дробная часть
            uint countSummand = 100; //кол-во слагаемых в выражении
            BigNum factorial = 1;
            
            for(int i=2; i < countSummand; i++)
            {
                    factorial = factorial * i;
                    approximatFunction += 1 / factorial; 
            }
            Console.WriteLine("Приближенное зн-е константы: {0}",approximatFunction.ToString());
       }
Спасибо большое.Но сравнил с эталонным значением е и при большом кол-ве знаков после запятой очень большая погрешность получается.Можно ли как-то это исправить?
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
09.03.2013, 18:16
Цитата Сообщение от grom_oleg Посмотреть сообщение
Спасибо большое.Но сравнил с эталонным значением е и при большом кол-ве знаков после запятой очень большая погрешность получается.Можно ли как-то это исправить?
так чем больше членов в ряду тем меньше погрешность, в теории рядов есть способ расчёта этой самой погрешности , но в любом случае для того что бы получить 100 цифру после запятой нужно сложить не 100 членов, а гораздо больше
1
21 / 21 / 7
Регистрация: 24.01.2013
Сообщений: 129
09.03.2013, 18:32  [ТС]
Цитата Сообщение от kelod Посмотреть сообщение
так чем больше членов в ряду тем меньше погрешность, в теории рядов есть способ расчёта этой самой погрешности , но в любом случае для того что бы получить 100 цифру после запятой нужно сложить не 100 членов, а гораздо больше
пробовал подсчет до 1000!(факториал) но выбрав 3 цифры подряд в первых 10-15 строках не нахожу аналога в эталоне
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
09.03.2013, 18:38
Цитата Сообщение от grom_oleg Посмотреть сообщение
пробовал подсчет до 1000!(факториал) но выбрав 3 цифры подряд в первых 10-15 строках не нахожу аналога в эталоне
а какое количество цифр совподает? я не помню как расчитать погрешности, погуглите, там есть формула в общем виде, для конкретного ряда можно получить количество членов, при котором n-ая цифра после запятой будет верной, всё от ряда зависит и от точности высичления, попробуйте по символьно сравнивать и постепенно увеличивать количество членов
0
21 / 21 / 7
Регистрация: 24.01.2013
Сообщений: 129
09.03.2013, 18:44  [ТС]
не смотрел конкретно сколько совпадает но где-то 30 цифр точно понятное дело все не проверял...
сейчас сделаю вывод в файл и проверю
мне все-таки кажется проблема с библиотекой
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
09.03.2013, 19:41
увеличте количество членов тыщ до 50 и будет Вам 100 цифр
0
21 / 21 / 7
Регистрация: 24.01.2013
Сообщений: 129
09.03.2013, 19:43  [ТС]
я попробую спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2013, 19:43
Помогаю со студенческими работами здесь

Дано двухзначное число. Найти число десятков, число единиц в нем, произведение его цифр
Помогите плиз=)) Дано двухзначное число. Найти число десятков ,число едениц в нем, произвеление его цыфр

Выяснить, какое число встречается в массиве раньше – число Фибоначчи или простое число
Дан натуральный массив A, состоящий из натуральных чисел. Выяснить, какое число встречается раньше – число Фибоначчи или простое число....

Данно вещественное число X. Найти в нем первое число десятка, число десятых долей.
помогите плз решить Данно вещественное число X. Найти в нем первое число десятка, число десятых долей.

Вводится число N необходимо вывести число NN, то есть приписать к N такое же число. Например, мы вводим 984, а выводится
Вводится число N необходимо вывести число NN, то есть приписать к N такое же число. Например, мы вводим 984, а выводится 984984

Загадано целое число из интервала [A,B]. Написать программу, которая за минимальное число вопросов отгадает это число
Я загадаю целое число из интервала . Напишите программу, которая за минимальное число вопросов отгадает это число. Играть будем так. Я...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru