Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 2
Регистрация: 07.02.2011
Сообщений: 221
1

Неправильно вычисляется факториал большого числа

31.08.2011, 06:12. Просмотров 2137. Ответов 4
Метки нет (Все метки)

Добрый день, подскажите пожалуйста, у меня есть ответ к задаче из учебника "Компьютерные сети и интернет" M=35 p=0.1 n=10 (Всего 35 пользователей вероятность активности каждого 0.1 вероятность что будут активны больше чем 10 ДОЛЖНА БЫТЬ 0.004) Но ответ никак не получается.
Проблема думаю в факториале, он очень большой, перепробовала и float и long и double
Java
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
import java.util.*;
import java.lang.*;
import java.io.*;
     
public class Factorial{
 
    public static long factorial( int n )
    {
        if( n <= 1 )    
            return 1;
        else
            return n * factorial( n - 1 );
    }
 
    public static void main( String [ ] args )
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("enter the M:");
        int M = sc.nextInt();
        System.out.println("enter the p:"); 
                double p = sc.nextDouble();
        System.out.println("enter the n:"); 
                int n = sc.nextInt();
        
        double x=0.0;
 
        for(int i=0; i<=n; i++)
        {
         x += (factorial(M)/( factorial(i)*factorial(M-i)))*Math.pow(p,i)*Math.pow((1-p),(M-i));
        }
        System.out.println(1-x);
        System.out.println(x);
    }
}
спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2011, 06:12
Ответы с готовыми решениями:

Неправильно вычисляется значение функции sin
Почему sin(90) у меня получается 0.8? class Trigonometry implements ActionListener{ ...

Неправильно вычисляется факториал
помогите мне код для факториала написать : вот мой код, но где-то в алгоритме ошибка, т.к. он...

Факториал больше 26 вычисляется неправильно
Здравствуйте! Возникла такая проблема: необходимо написать программу на языке C, вычисляющую...

Факториал числа вычисляется неверно
Почему-то показывает всегда нуль.Что-то не так или очень быстро это делается? do ...

4
382 / 330 / 159
Регистрация: 06.12.2010
Сообщений: 894
31.08.2011, 09:00 2
Цитата Сообщение от Elena_Tu Посмотреть сообщение
factorial(M)/( factorial(i)*factorial(M-i))
Если получается число <1, то оно будет равно нулю. Добавьте cast (double).

Добавлено через 6 минут
ещё сомнений вызывает вот эта запись:
Цитата Сообщение от Elena_Tu Посмотреть сообщение
for(int i=0; i<=n; i++)
может всё-таки от 1 или до <n?
0
1 / 1 / 2
Регистрация: 07.02.2011
Сообщений: 221
31.08.2011, 09:10  [ТС] 3
я все равно не поняла как факториал может быть меньше единицы, он большой...
а формула верная от 0 начинается отсчет и при небольших значениях работает верно
0
Эксперт JavaЭксперт С++
8364 / 3585 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
31.08.2011, 09:59 4
Elena_Tu, у простых типов недостаточно точности. Можно использовать BigInteger(надо проверить перфоманс) или использовать этот класс Вычисление факториала числа N (с записью результата в файл) писал очень давно и код кривоват, но до 100 000! считает правильно

По поводу кода - не разумно на каждой итерации цикла вычислять M!, лучше это сделать перед циклом и использование метода Math.pow лучше заменить на операции деления и умножения на каждой итерации цикла.
0
Модератор
62498 / 46688 / 32180
Регистрация: 18.05.2008
Сообщений: 112,951
31.08.2011, 10:06 5
Для вычисления по формуле C=n!/(k!*(n-k)!) совсем не обязательно вычислять огромные факториалы, поскольку есть сокращение. Можно вычислять в цикле, тогда не будет слишком больших чисел.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2011, 10:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Факториал большого числа
Доброго времени суток! Захотелось вычислить факториал большого числа. Наткнулся на gmp. Посмотрел...

Как вычислить факториал большого числа?
Как возвести 1000 в квадрат. Проблема заключается в том, что ни одна строка не вместит в себя число...

Как посчитать факториал большого числа, если диапазон типа данных (int) ограничен?
а как мне правильно вывести кол-во чисел?? Я так понимаю,что я вышел за пределы диапазона(( ...

Неправильно вычисляется выражение
Выводит 0,834370587875676 в результате, но должно выводить 0,7121 Работаю в Borland Builder C++ 6...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.