[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как перемножить много чисел?
Сompressor
Здравствуйте, есть небольшой скрипт, который должен перемножить все числа от 1000000 до 2000000.

<?php
$start = 1000000;
$end = 2000000;
$result = $start;
while ($start <= $end)
{
$start++;
$result *= $start;
echo $result , "<br>";
}
?>


Но выводится:
1.000001E+12
1.000003E+18
...
1.00127579167E+306
INF
INF
INF
...

Что такое INF, и как с ним бороться? Заранее спасибо.



Спустя 33 минуты, 4 секунды (18.06.2011 - 21:15) T1grOK написал(а):
тип integer не может работать с большими числами, поэтому числа преобразовываются в float(как в вашем случае). INF - подозреваю число настолько большое,что не может быть отображено даже float-ом.

Спустя 4 минуты, 37 секунд (18.06.2011 - 21:19) bulgakov написал(а):
Может быть я ошибаюсь но на мой взгляд лучше использовать какую-нибудь специальную библиотеку которая может работать с большими числами, например GNU Multiple Precision, GMP. Вот тут я накидал примерное решение, надеюсь оно правильно, да и не забудьте установить если она не установлена эту библиотеку перед использованием:




$start = 1000000;
$end = 2000000;
$result = gmp_init($start);
while ($start < $end)
{
$start++;
$result = gmp_init($result * $start);
echo gmp_strval($result) , "<br>";
}

Буду рад если укажете на мои ошибки или представите более лучшее решение.

Спустя 15 минут, 55 секунд (18.06.2011 - 21:35) alex12060 написал(а):
В математике есть такое:

Число лежит в промежутке от минус бесконечности, до плюс бесконечности.
Самое большое число, которое мог воспроизвести PHP до этого, было
2.2250738585072011e-308
И с плюсом.

INF - инфинитив. Неопределенное число.
Вот..

Спустя 1 час, 45 минут, 48 секунд (18.06.2011 - 23:21) webmonkey написал(а):
Перемножение сверхбольших чисел делается, насколько я знаю, с использованием строк - алгоритм есть.

Спустя 4 минуты, 31 секунда (18.06.2011 - 23:25) Игорь_Vasinsky написал(а):
не важно, есть придел - 2.2250738585072011e-308

Спустя 12 часов, 3 минуты, 1 секунда (19.06.2011 - 11:28) T1grOK написал(а):
Цитата (Игорь_Vasinsky @ 18.06.2011 - 20:25)
не важно, есть придел - 2.2250738585072011e-308

Если работать как с числом то да. Если же как со строкой, то можно разбить число на части и перемножать(как в столбик) куски, а потом склеить в одно целое, то число(строка) может быть произвольно большим. Но это все придумано до нас, так что не нужно изобретать велосипед.

Спустя 28 минут, 22 секунды (19.06.2011 - 11:57) alex12060 написал(а):
Игорь_Vasinsky

Это уже не предел. Это уже баг)

Спустя 2 дня, 8 часов, 42 минуты, 1 секунда (21.06.2011 - 20:39) Сompressor написал(а):
Спасибо всем за ответы.
Я нашел спец. функцию для перемножения больших чисел - bcmul.
Имеется по умолчанию в PHP 4 и выше.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.