Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

c

What are some edge cases of log1pl?

Hammad Nasir

The log1pl function

The log1pl function takes a long double argument (arg) and computes ln(1 + arg).

The log1pl function is defined in the math.h standard library with the following structure:

long double log1pl( long double arg );

Note: The log1pl(arg) function is more precise than logl(1 + arg) if arg is closer to zero.

Parameters

  • arg: a long double number

Return value

  • 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.

Example usage of the log1pf function

The following code provides a comparison between the log1pl and logl functions:

#include<stdio.h>
#include<math.h>
#include<float.h>
int main() {
  long double x = 1e-20;
  long double y = 1 + x;

  printf("log1pl(1e-20) = %Lg\n", log1pl(x));
  printf("logl(1 + 1e-20) = %Lg\n", logl(y));
}

In the example above, both functions compute ln(1 + e^(-20)), but log1pl gives a non-zero result. Therefore, log1pl 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("log1pl(+0.0) = %Lf\n", log1pl(+0.0));
  printf("log1pl(-0.0) = %Lf\n", log1pl(-0.0));
  printf("log1pl(+inf) = %Lf\n", log1pl(INFINITY));
  printf("log1pl(-1.0) = %Lf\n", log1pl(-1.0));
}

RELATED TAGS

c

CONTRIBUTOR

Hammad Nasir
Copyright ©2022 Educative, Inc. All rights reserved
RELATED COURSES

View all Courses

Keep Exploring