Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > bash и факториал


Автор: BlackRu 29.7.2011, 14:28
Почему bc в данном случае считает факториалы только до 20?
а выше выдает уже неверные значения со знаком минус...

Код

#!/bin/bash
 
read c
a=1
b=1
         while [  $b -le $c ]; do
             a=`echo $((a*=b)) | bc -l`; echo $a
             let b++
         done


Автор: VirtualVoid 29.7.2011, 19:13
Скорее всего внутри себя интерпретатор использует 32-битное целое со знаком. Тип данных переполняется, т.к. из положительных чисел он не вмещает более, чем 2^31.

Вызод: реализовать длинную арифметику например на массивах.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)