Trusted answers to developer questions

Hammad Nasir

`log1pf`

functionThe ** log1pf** function takes a

`float`

argument (`arg`

) and computes `ln(1 + arg)`

.The `log1pf`

function is defined in the `math.h`

standard library with the following structure:

```
float log1pf( float arg );
```

Note: The function

`log1pf(arg)`

is more precise than`log(1 + arg)`

if`arg`

is closer to zero.

`arg`

: a floating point number

- If no errors occur, then
`ln(1 + arg)`

is returned - If
`arg`

is positive or negative zero, then`arg`

is returned - If a domain error occurs (e.g., where
`1 + arg`

is less than`0`

),`NaN`

is returned - If a pole error occurs (e.g., result of
`ln(1 + arg)`

is infinity), $-\infty$ is returned - If
`arg`

is $+\infty$, $+\infty$ is returned - If
`arg`

is`NaN`

, then`NaN`

is returned

`log1pf`

functionThe following code provides a comparison between the `log1pf`

and `log`

functions:

#include<stdio.h> #include<math.h> #include<float.h> int main() { printf("log1pf(1e-16) = %g\n", log1pf(1e-16)); printf("log(1 + 1e-16) = %g\n", log(1 + 1e-16)); }

In the example above, both functions compute `ln(1 + e^(-16))`

, but `log1pf`

gives a non-zero result. Therefore, `log1pf`

must be used if the argument `arg`

is close to zero since the result has higher precision.

The following code demonstrates the corner case inputs to the `logpf`

function:

#include<stdio.h> #include<math.h> #include<float.h> int main() { printf("log1pf(+0.0) = %f\n", log1pf(+0.0)); printf("log1pf(-0.0) = %f\n", log1pf(-0.0)); printf("log1pf(+inf) = %f\n", log1pf(INFINITY)); printf("log1pf(-1.0) = %f\n", log1pf(-1.0)); }

RELATED TAGS

c

CONTRIBUTOR

Hammad Nasir

Copyright Â©2022 Educative, Inc. All rights reserved

RELATED COURSES

View all Courses

Keep Exploring

Related Courses