# Precision

The values of an $L$-series are computed numerically and the precision required in these computations can be specified using the `Precision` parameter when an $L$-function is created. For example,

```
> K := CyclotomicField(3);
> L := LSeries(K: Precision:=60);
> Evaluate(L,2);
1.28519095548414940291751179869957460396917839702892124395133

```

computes $\zeta(K,2)$ to 60 digits precision. The default value `Precision:=0` is equivalent to the precision of the default real field at the time of the `LSeries` initialization call. If the user only wants to check numerically whether an $L$-function vanishes at a given point $s$ and the value itself is not needed, it might make sense to decrease the precision (to 9 digits, say) to speed up the computations.

```
> E := EllipticCurve([0,0,1,-7,6]);
> RootNumber(E);
-1
> L := LSeries(E: Precision:=9);
> Evaluate(L, 1: Derivative:=1);
1.50193628E-11
> Rank(E);
3

```

This example checks numerically that $L'(E,1)=0$ for the elliptic curve $E$ of conductor 5077 from Example [Example: Lseries Evaluate](computing.md#example-ex-7d80f5).

The precision may be changed at a later time using `LSetPrecision`.

## `LSetPrecision(L, precision): LSer, RngIntElt -> {}`

```magma
CoefficientGrowth: UserProgram                    Default: 
ImS              : FldReElt                       Default: 0
Asymptotics      : BoolElt                        Default: true
```

Change the number of digits to which the $L$-values are going to be computed to $precision$. The parameter `CoefficientGrowth` is described below in Section [L-series with Unusual Coefficient Growth](#cfgrowth).

## $L$-series with Unusual Coefficient Growth

The parameter `CoefficientGrowth` is the name $f$ of a function $f(x)$ (or $f(L,x)$, where $L$ is an $L$-series) which is an increasing function of a real positive variable $x$ such that $|a_n|\le f(n)$. This is used to truncate various infinite series in computations. It is set by default to the function $f(x)=1.5\cdot x^{\rho-1}$ where $\rho$ is the largest real part of a pole of $L^*(s)$ if $L^*(s)$ has poles and $f(x)=2x^{(weight-1)/2}$ if $L^*(s)$ has no poles. The user will most likely leave this setting untouched.

## Computing $L(s)$ when Im$(s)$ is Large (ImS Parameter)

If $s$ is a complex number having a large imaginary part, a great deal of cancellation occurs while computing $L(s)$, resulting in a loss of precision. (The time when all the precision-related parameters are pre-computed is when the function `LSeries` is invoked, and at that time Magma has no way of knowing whether $L(s)$ is to be evaluated for complex numbers $s$ having large imaginary part.) If this happens, a message is printed, warning of a precision loss. To avoid this, the user may specify the largest Im$(s)$ for which the $L$-values are to be calculated as the value of the `ImS` parameter at the time of the $L$-series initialization or, later, with a call to `LSetPrecision`:

```
> C<i> := ComplexField();
> L := RiemannZeta();
> Evaluate(L, 1/2+40*i);            // wrong
Warning: Loss of 13 digits due to cancellation
0.793044952561928671982128851045 - 1.04127461465106502007452195086*i
> LSetPrecision(L, 30: ImS:=40);
> Evaluate(L, 1/2+40*i);            // right
0.793044952561928671964892588898 - 1.04127461465106502005189059539*i

```

## Implementation of $L$-series Computations (Asymptotics Parameter)

The optional parameter `Asymptotics` in `LSetPrecision` and in the general `LSeries` function specifies the method by which the special functions needed for the $L$-series evaluation are computed.

If set to `false`, Magma will use only Taylor expansions at the origin and these are always known to be convergent. With the default behaviour (`Asymptotics:=true`) Magma will use both the Taylor expansions and the continued fractions of the asymptotic expansions at infinity. This is much faster, but these continued fractions are not proved to be convergent in all cases.
