# [SciPy-Dev] factorial2 does not return a float with exact=False

Vincent Davis vincent@vincentdavis....
Mon Jun 28 20:29:40 CDT 2010

```On Mon, Jun 28, 2010 at 7:24 PM, Warren Weckesser
<warren.weckesser@enthought.com> wrote:
> Vincent Davis wrote:
>> On Mon, Jun 28, 2010 at 7:11 PM, Vincent Davis <vincent@vincentdavis.net> wrote:
>>
>>> According to the docs factorial2 should return a float or int, float
>>> in the case of exact=False, It does not.
>>>
>>>
>>>>>> import scipy.misc.common as sc
>>>>>> sc.factorial2(7, exact=False)
>>>>>>
>>> array(105.00000000000001)
>>>
>>>>>> sc.factorial2(7, exact=True)
>>>>>>
>>> 105L
>>>
>>>>>> sc.factorial2(8, exact=True)
>>>>>>
>>> 384L
>>>
>>>>>> sc.factorial2(8, exact=False)
>>>>>>
>>> array(384.0)
>>>
>>>>>> sc.factorial2(8, exact=False)
>>>>>>
>>
>> Same with factorial
>>
>>
>>>>> sc.factorial(5, exact=False)
>>>>>
>> array(120.0)
>>
>>>>> arr = np.array([3,4,5])
>>>>> sc.factorial(arr, exact=False)
>>>>>
>> array([   6.,   24.,  120.])
>>
>>>>> sc.factorial(5, exact=True)
>>>>>
>> 120L
>>
>
> I think the problem is simply that it is an awkward API.  After looking
> at the code for factorial, a more precise description is:
>
> If `exact` is True, `n` must be an integer, and an integer is returned.
>
> If `exact` is False, `n` is array_like, and an array the same shape as
> `n` is returned.

I am finding that when editing the docs it is not always clear if the
problem is the docs or the function.
comb() has a similar issue.

I guess my question is?
My thought is the you factoral(), or comb() return an array only if 1,
exact=False and n is not an array. Basically you get back the same
dtype as input.
That said fixing the docs is just a little easier.

Vincent
>
>
> Warren
>
>> _______________________________________________
>> SciPy-Dev mailing list
>> SciPy-Dev@scipy.org
>> http://mail.scipy.org/mailman/listinfo/scipy-dev
>>
>
> _______________________________________________
> SciPy-Dev mailing list
> SciPy-Dev@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-dev
>
```