{"record":{"id":"466d44743c320d40","repo":"TheAlgorithms/Python","slug":"maclaurin-sin-requires-a-positive-int-for-accura","errorCode":null,"errorMessage":"maclaurin_sin() requires a positive int for accuracy","messagePattern":"maclaurin_sin\\(\\) requires a positive int for accuracy","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"maths/maclaurin_series.py","lineNumber":50,"sourceCode":"    >>> maclaurin_sin(10, -30)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_sin() requires a positive int for accuracy\r\n    >>> maclaurin_sin(10, 30.5)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_sin() requires a positive int for accuracy\r\n    >>> maclaurin_sin(10, \"30\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_sin() requires a positive int for accuracy\r\n    \"\"\"\r\n\r\n    if not isinstance(theta, (int, float)):\r\n        raise ValueError(\"maclaurin_sin() requires either an int or float for theta\")\r\n\r\n    if not isinstance(accuracy, int) or accuracy <= 0:\r\n        raise ValueError(\"maclaurin_sin() requires a positive int for accuracy\")\r\n\r\n    theta = float(theta)\r\n    div = theta // (2 * pi)\r\n    theta -= 2 * div * pi\r\n    return sum(\r\n        (-1) ** r * theta ** (2 * r + 1) / factorial(2 * r + 1) for r in range(accuracy)\r\n    )\r\n\r\n\r\ndef maclaurin_cos(theta: float, accuracy: int = 30) -> float:\r\n    \"\"\"\r\n    Finds the maclaurin approximation of cos\r\n\r\n    :param theta: the angle to which cos is found\r\n    :param accuracy: the degree of accuracy wanted\r\n    :return: the value of cosine in radians\r\n\r\n\r","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/maths/maclaurin_series.py#L32-L68","documentation":"Raised by maclaurin_sin() in maths/maclaurin_series.py when the accuracy argument is not an int or is <= 0. accuracy controls how many terms of the Maclaurin series are summed (range(accuracy)), so it must be a positive Python int. Floats like 30.5 and numeric strings are rejected even if they 'look' numeric.","triggerScenarios":"maclaurin_sin(10, 30.5), maclaurin_sin(10, '30'), maclaurin_sin(10, 0), or maclaurin_sin(10, -3). Note maclaurin_sin(10, True) passes because bool is a subclass of int and True == 1.","commonSituations":"Reading accuracy from CLI args (always strings with argparse unless type=int is set), from JSON floats, or dividing/computing the term count and passing a float result.","solutions":["Pass a literal positive int: maclaurin_sin(theta, 30).","Coerce explicitly: maclaurin_sin(theta, int(accuracy)) when accuracy arrives as a float or numeric string.","With argparse, declare the option with type=int so you never receive a string."],"exampleFix":"# before\nmaclaurin_sin(1.2, accuracy='30')\n\n# after\nmaclaurin_sin(1.2, accuracy=30)","handlingStrategy":"validation","validationCode":"if not isinstance(accuracy, int) or isinstance(accuracy, bool) or accuracy <= 0:\n    accuracy = 30  # or raise your own error with context","typeGuard":"def is_valid_accuracy(a) -> bool:\n    return isinstance(a, int) and not isinstance(a, bool) and a > 0","tryCatchPattern":null,"preventionTips":["Use argparse type=int for numeric CLI options.","Cast computed term counts with int() before passing."],"tags":["math","valueerror","parameter-validation","trigonometry"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}