Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit d17443b

Browse filesBrowse files
authored
Merge pull request #572 from knewbury01/knewbury01/fix-193
UncheckedRangeDomainPoleErrors: add missing cases
2 parents 3fb6ac2 + aab34fd commit d17443b
Copy full SHA for d17443b

File tree

Expand file treeCollapse file tree

9 files changed

+450
-283
lines changed
Filter options
Expand file treeCollapse file tree

9 files changed

+450
-283
lines changed

‎c/common/test/includes/standard-library/math.h

Copy file name to clipboardExpand all lines: c/common/test/includes/standard-library/math.h
+238-229Lines changed: 238 additions & 229 deletions
Large diffs are not rendered by default.
+30-18Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,30 @@
1-
| test.c:4:3:4:6 | call to acos | Domain error in call to acos: the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
2-
| test.c:8:3:8:6 | call to acos | Domain error in call to acos: the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
3-
| test.c:9:3:9:6 | call to asin | Domain error in call to asin: the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
4-
| test.c:13:3:13:6 | call to asin | Domain error in call to asin: the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
5-
| test.c:14:3:14:7 | call to atanh | Domain error in call to atanh: the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
6-
| test.c:18:3:18:7 | call to atanh | Domain error in call to atanh: the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
7-
| test.c:19:3:19:7 | call to atan2 | Domain error in call to atan2: both arguments are equal to zero. |
8-
| test.c:23:3:23:5 | call to pow | Domain error in call to pow: both arguments are equal to zero. |
9-
| test.c:27:3:27:5 | call to pow | Domain error in call to pow: both arguments are less than zero. |
10-
| test.c:33:3:33:7 | call to acosh | Domain error in call to acosh: argument is less than 1. |
11-
| test.c:34:3:34:7 | call to ilogb | Domain error in call to ilogb: argument is equal to zero. |
12-
| test.c:37:3:37:5 | call to log | Domain error in call to log: argument is negative. |
13-
| test.c:40:3:40:7 | call to log10 | Domain error in call to log10: argument is negative. |
14-
| test.c:43:3:43:6 | call to log2 | Domain error in call to log2: argument is negative. |
15-
| test.c:46:3:46:6 | call to sqrt | Domain error in call to sqrt: argument is negative. |
16-
| test.c:49:3:49:7 | call to log1p | Domain error in call to log1p: argument is less than 1. |
17-
| test.c:52:3:52:6 | call to logb | Domain error in call to logb: argument is equal to zero. |
18-
| test.c:55:3:55:8 | call to tgamma | Domain error in call to tgamma: argument is equal to zero. |
1+
| test.c:6:3:6:6 | call to acos | Domain error in call to 'acos': the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
2+
| test.c:10:3:10:6 | call to acos | Domain error in call to 'acos': the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
3+
| test.c:11:3:11:6 | call to asin | Domain error in call to 'asin': the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
4+
| test.c:15:3:15:6 | call to asin | Domain error in call to 'asin': the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
5+
| test.c:16:3:16:7 | call to atanh | Domain error in call to 'atanh': the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
6+
| test.c:18:3:18:7 | call to atanh | Domain error in call to 'atanh': the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
7+
| test.c:19:3:19:7 | call to atan2 | Domain error in call to 'atan2': both arguments are equal to zero. |
8+
| test.c:23:3:23:5 | call to pow | Domain error in call to 'pow': both arguments are equal to zero. |
9+
| test.c:27:3:27:5 | call to pow | Domain error in call to 'pow': both arguments are less than zero. |
10+
| test.c:32:3:32:7 | call to acosh | Domain error in call to 'acosh': argument is less than 1. |
11+
| test.c:33:3:33:7 | call to ilogb | Domain error in call to 'ilogb': argument is equal to zero. |
12+
| test.c:36:3:36:5 | call to log | Domain error in call to 'log': argument is negative. |
13+
| test.c:38:3:38:7 | call to log10 | Domain error in call to 'log10': argument is negative. |
14+
| test.c:40:3:40:6 | call to log2 | Domain error in call to 'log2': argument is negative. |
15+
| test.c:42:3:42:6 | call to sqrt | Domain error in call to 'sqrt': argument is negative. |
16+
| test.c:45:3:45:7 | call to log1p | Domain error in call to 'log1p': argument is less than 1. |
17+
| test.c:47:3:47:6 | call to logb | Domain error in call to 'logb': argument is equal to zero. |
18+
| test.c:50:3:50:8 | call to tgamma | Domain error in call to 'tgamma': argument is equal to zero. |
19+
| test.c:56:3:56:5 | call to abs | Range error in call to 'abs': argument is most negative number. |
20+
| test.c:57:3:57:6 | call to fmod | Domain error in call to 'fmod': y is 0. |
21+
| test.c:59:3:59:7 | call to frexp | Unspecified error in call to 'frexp': Arg is Nan or infinity and exp is unspecified as a result. |
22+
| test.c:60:3:60:7 | call to frexp | Unspecified error in call to 'frexp': Arg is Nan or infinity and exp is unspecified as a result. |
23+
| test.c:64:3:64:7 | call to atanh | Pole error in call to 'atanh': argument is plus or minus 1. |
24+
| test.c:65:3:65:7 | call to atanh | Pole error in call to 'atanh': argument is plus or minus 1. |
25+
| test.c:66:3:66:5 | call to log | Pole error in call to 'log': argument is equal to zero. |
26+
| test.c:67:3:67:7 | call to log10 | Pole error in call to 'log10': argument is equal to zero. |
27+
| test.c:68:3:68:6 | call to log2 | Pole error in call to 'log2': argument is equal to zero. |
28+
| test.c:69:3:69:7 | call to log1p | Pole error in call to 'log1p': argument is equal to negative one. |
29+
| test.c:71:3:71:5 | call to pow | Pole error in call to 'pow': base is zero and exp is negative. |
30+
| test.c:72:3:72:8 | call to lgamma | Pole error in call to 'lgamma': argument is equal to zero. |

‎c/common/test/rules/uncheckedrangedomainpoleerrors/test.c

Copy file name to clipboardExpand all lines: c/common/test/rules/uncheckedrangedomainpoleerrors/test.c
+24-8Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
#include <limits.h>
12
#include <math.h>
3+
#include <stdlib.h>
24

3-
void test() {
5+
void test_domain_errors() {
46
acos(-1.1f); // NON_COMPLIANT
57
acos(-1.0f); // COMPLIANT
68
acos(0.0f); // COMPLIANT
@@ -12,9 +14,7 @@ void test() {
1214
asin(1.0f); // COMPLIANT
1315
asin(1.1f); // NON_COMPLIANT
1416
atanh(-1.1f); // NON_COMPLIANT
15-
atanh(-1.0f); // COMPLIANT
1617
atanh(0.0f); // COMPLIANT
17-
atanh(1.0f); // COMPLIANT
1818
atanh(1.1f); // NON_COMPLIANT
1919
atan2(0.0f, 0.0f); // NON_COMPLIANT
2020
atan2(1.0f, 0.0f); // COMPLIANT
@@ -26,7 +26,6 @@ void test() {
2626
pow(1.0f, 1.0f); // COMPLIANT
2727
pow(-1.0f, -1.0f); // NON_COMPLIANT
2828
pow(-1.0f, 0.0f); // COMPLIANT
29-
pow(0.0f, -1.0f); // COMPLIANT
3029
pow(1.0f, -1.0f); // COMPLIANT
3130
pow(-1.0f, 1.0f); // COMPLIANT
3231
acosh(1.0f); // COMPLIANT
@@ -35,19 +34,15 @@ void test() {
3534
ilogb(1.0f); // COMPLIANT
3635
ilogb(-1.0f); // COMPLIANT
3736
log(-1.0f); // NON_COMPLIANT
38-
log(0.0f); // COMPLIANT
3937
log(1.0f); // COMPLIANT
4038
log10(-1.0f); // NON_COMPLIANT
41-
log10(0.0f); // COMPLIANT
4239
log10(1.0f); // COMPLIANT
4340
log2(-1.0f); // NON_COMPLIANT
44-
log2(0.0f); // COMPLIANT
4541
log2(1.0f); // COMPLIANT
4642
sqrt(-1.0f); // NON_COMPLIANT
4743
sqrt(0.0f); // COMPLIANT
4844
sqrt(1.0f); // COMPLIANT
4945
log1p(-2.0f); // NON_COMPLIANT
50-
log1p(-1.0f); // COMPLIANT
5146
log1p(0.0f); // COMPLIANT
5247
logb(0.0f); // NON_COMPLIANT
5348
logb(1.0f); // COMPLIANT
@@ -56,3 +51,24 @@ void test() {
5651
tgamma(1.0f); // COMPLIANT
5752
tgamma(-1.1f); // COMPLIANT
5853
}
54+
55+
void fn_in_193_missing_domain_or_range_cases() {
56+
abs(INT_MIN); // NON_COMPLIANT
57+
fmod(1.0f, 0.0f); // NON_COMPLIANT
58+
int *exp;
59+
frexp(NAN, exp); // NON_COMPLIANT
60+
frexp(INFINITY, exp); // NON_COMPLIANT
61+
}
62+
63+
void test_pole_errors() {
64+
atanh(-1.0f); // NON_COMPLIANT
65+
atanh(1.0f); // NON_COMPLIANT
66+
log(0.0f); // NON_COMPLIANT
67+
log10(0.0f); // NON_COMPLIANT
68+
log2(0.0f); // NON_COMPLIANT
69+
log1p(-1.0f); // NON_COMPLIANT
70+
// logb(x) already covered in domain cases
71+
pow(0.0f, -1.0f); // NON_COMPLIANT
72+
lgamma(0.0f); // NON_COMPLIANT
73+
lgamma(-1); // NON_COMPLIANT[FALSE_NEGATIVE]
74+
}

‎change_notes/2024-04-23-fix-fp-193.md

Copy file name to clipboard
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
- `A0-4-4`,`FLP32-C` - `UncheckedRangeDomainPoleErrors.ql`:
2+
- Fixes #193. Adds missing cases for domain errors, an unspecified result case and pole error cases.

‎cpp/common/src/codingstandards/cpp/rules/uncheckedrangedomainpoleerrors/UncheckedRangeDomainPoleErrors.qll

Copy file name to clipboardExpand all lines: cpp/common/src/codingstandards/cpp/rules/uncheckedrangedomainpoleerrors/UncheckedRangeDomainPoleErrors.qll
+90-2Lines changed: 90 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ predicate hasDomainError(FunctionCall fc, string description) {
4242
upperBound(fc.getArgument(0)) < 1.0 and
4343
description = "argument is less than 1"
4444
or
45+
//pole error is the same as domain for logb and tgamma (but not ilogb - no pole error exists)
4546
functionWithDomainError = getMathVariants(["ilogb", "logb", "tgamma"]) and
4647
fc.getArgument(0).getValue().toFloat() = 0 and
4748
description = "argument is equal to zero"
@@ -53,18 +54,95 @@ predicate hasDomainError(FunctionCall fc, string description) {
5354
functionWithDomainError = getMathVariants("log1p") and
5455
upperBound(fc.getArgument(0)) < -1.0 and
5556
description = "argument is less than 1"
57+
or
58+
functionWithDomainError = getMathVariants("fmod") and
59+
fc.getArgument(1).getValue().toFloat() = 0 and
60+
description = "y is 0"
5661
)
5762
}
5863

64+
predicate hasRangeError(FunctionCall fc, string description) {
65+
exists(Function functionWithRangeError | fc.getTarget() = functionWithRangeError |
66+
functionWithRangeError.hasGlobalOrStdName(["abs", "labs", "llabs", "imaxabs"]) and
67+
fc.getArgument(0) = any(MINMacro m).getAnInvocation().getExpr() and
68+
description = "argument is most negative number"
69+
)
70+
}
71+
72+
predicate hasPoleError(FunctionCall fc, string description) {
73+
exists(Function functionWithPoleError | fc.getTarget() = functionWithPoleError |
74+
functionWithPoleError = getMathVariants("atanh") and
75+
(
76+
fc.getArgument(0).getValue().toFloat() = -1.0
77+
or
78+
fc.getArgument(0).getValue().toFloat() = 1.0
79+
) and
80+
description = "argument is plus or minus 1"
81+
or
82+
functionWithPoleError = getMathVariants("log1p") and
83+
fc.getArgument(0).getValue().toFloat() = -1 and
84+
description = "argument is equal to negative one"
85+
or
86+
functionWithPoleError = getMathVariants("pow") and
87+
fc.getArgument(0).getValue().toFloat() = 0.0 and
88+
fc.getArgument(1).getValue().toFloat() < 0.0 and
89+
description = "base is zero and exp is negative"
90+
or
91+
functionWithPoleError = getMathVariants("lgamma") and
92+
fc.getArgument(0).getValue().toFloat() = 0 and
93+
description = "argument is equal to zero"
94+
or
95+
functionWithPoleError = getMathVariants(["log", "log10", "log2"]) and
96+
fc.getArgument(0).getValue().toFloat() = 0.0 and
97+
description = "argument is equal to zero"
98+
)
99+
}
100+
101+
predicate unspecifiedValueCases(FunctionCall fc, string description) {
102+
exists(Function functionWithUnspecifiedResultError |
103+
fc.getTarget() = functionWithUnspecifiedResultError
104+
|
105+
functionWithUnspecifiedResultError = getMathVariants("frexp") and
106+
(
107+
fc.getArgument(0) = any(InfinityMacro m).getAnInvocation().getExpr() or
108+
fc.getArgument(0) = any(NanMacro m).getAnInvocation().getExpr()
109+
) and
110+
description = "Arg is Nan or infinity and exp is unspecified as a result"
111+
)
112+
}
113+
114+
/**
115+
* A macro which is representing infinity
116+
*/
117+
class InfinityMacro extends Macro {
118+
InfinityMacro() { this.getName().toLowerCase().matches("infinity") }
119+
}
120+
121+
/**
122+
* A macro which is representing nan
123+
*/
124+
class NanMacro extends Macro {
125+
NanMacro() { this.getName().toLowerCase().matches("nan") }
126+
}
127+
128+
/**
129+
* A macro which is representing INT_MIN or LONG_MIN or LLONG_MIN
130+
*/
131+
class MINMacro extends Macro {
132+
MINMacro() { this.getName().toLowerCase().matches(["int_min", "long_min", "llong_min"]) }
133+
}
134+
59135
/*
60136
* Domain cases not covered by this query:
61137
* - pow - x is finite and negative and y is finite and not an integer value.
62138
* - tgamma - negative integer can't be covered.
63139
* - lrint/llrint/lround/llround - no domain errors checked
64-
* - fmod - no domain errors checked.
65140
* - remainder - no domain errors checked.
66141
* - remquo - no domain errors checked.
67142
*
143+
* Pole cases not covered by this query:
144+
* - lgamma - negative integer can't be covered.
145+
*
68146
* Implementations may also define their own domain errors (as per the C99 standard), which are not
69147
* covered by this query.
70148
*/
@@ -73,6 +151,16 @@ query predicate problems(FunctionCall fc, string message) {
73151
not isExcluded(fc, getQuery()) and
74152
exists(string description |
75153
hasDomainError(fc, description) and
76-
message = "Domain error in call to " + fc.getTarget().getName() + ": " + description + "."
154+
message = "Domain error in call to '" + fc.getTarget().getName() + "': " + description + "."
155+
or
156+
hasRangeError(fc, description) and
157+
message = "Range error in call to '" + fc.getTarget().getName() + "': " + description + "."
158+
or
159+
hasPoleError(fc, description) and
160+
message = "Pole error in call to '" + fc.getTarget().getName() + "': " + description + "."
161+
or
162+
unspecifiedValueCases(fc, description) and
163+
message =
164+
"Unspecified error in call to '" + fc.getTarget().getName() + "': " + description + "."
77165
)
78166
}

‎cpp/common/test/includes/standard-library/limits.h

Copy file name to clipboardExpand all lines: cpp/common/test/includes/standard-library/limits.h
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
#define LLONG_MAX 9223372036854775807
2424
#define ULLONG_MIN 0ULL
2525
#define ULLONG_MAX 0xffffffffffffffff
26+
#define NAN (0.0f / 0.0f)
27+
#define INFINITY 1e5000f
2628

2729
namespace std {
2830
template <class T> class numeric_limits;

‎cpp/common/test/includes/standard-library/math.h

Copy file name to clipboardExpand all lines: cpp/common/test/includes/standard-library/math.h
+11Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#ifndef _GHLIBCPP_MATH
22
#define _GHLIBCPP_MATH
3+
int abs(int x);
4+
long abs(long x);
35
double acos(double x);
46
float acosf(float x);
57
long double acosl(long double x);
@@ -15,9 +17,18 @@ long double acoshl(long double x);
1517
double atanh(double x);
1618
float atanhf(float x);
1719
long double atanhl(long double x);
20+
double fmod(double x, double y);
21+
float fmodf(float x, float y);
22+
long double fmodl(long double x, long double y);
23+
double frexp(double x, int *y);
24+
float frexpf(float x, int *y);
25+
long double frexpl(long double, int *);
1826
int ilogb(double x);
1927
int ilogbf(float x);
2028
int ilogbl(long double x);
29+
double lgamma(double x);
30+
float lgammaf(float x);
31+
long double lgammal(long double x);
2132
double log(double x);
2233
float logf(float x);
2334
long double logl(long double x);
+30-18Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,30 @@
1-
| test.cpp:4:3:4:6 | call to acos | Domain error in call to acos: the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
2-
| test.cpp:8:3:8:6 | call to acos | Domain error in call to acos: the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
3-
| test.cpp:9:3:9:6 | call to asin | Domain error in call to asin: the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
4-
| test.cpp:13:3:13:6 | call to asin | Domain error in call to asin: the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
5-
| test.cpp:14:3:14:7 | call to atanh | Domain error in call to atanh: the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
6-
| test.cpp:18:3:18:7 | call to atanh | Domain error in call to atanh: the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
7-
| test.cpp:19:3:19:7 | call to atan2 | Domain error in call to atan2: both arguments are equal to zero. |
8-
| test.cpp:23:3:23:5 | call to pow | Domain error in call to pow: both arguments are equal to zero. |
9-
| test.cpp:27:3:27:5 | call to pow | Domain error in call to pow: both arguments are less than zero. |
10-
| test.cpp:33:3:33:7 | call to acosh | Domain error in call to acosh: argument is less than 1. |
11-
| test.cpp:34:3:34:7 | call to ilogb | Domain error in call to ilogb: argument is equal to zero. |
12-
| test.cpp:37:3:37:5 | call to log | Domain error in call to log: argument is negative. |
13-
| test.cpp:40:3:40:7 | call to log10 | Domain error in call to log10: argument is negative. |
14-
| test.cpp:43:3:43:6 | call to log2 | Domain error in call to log2: argument is negative. |
15-
| test.cpp:46:3:46:6 | call to sqrt | Domain error in call to sqrt: argument is negative. |
16-
| test.cpp:49:3:49:7 | call to log1p | Domain error in call to log1p: argument is less than 1. |
17-
| test.cpp:52:3:52:6 | call to logb | Domain error in call to logb: argument is equal to zero. |
18-
| test.cpp:55:3:55:8 | call to tgamma | Domain error in call to tgamma: argument is equal to zero. |
1+
| test.cpp:5:3:5:6 | call to acos | Domain error in call to 'acos': the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
2+
| test.cpp:9:3:9:6 | call to acos | Domain error in call to 'acos': the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
3+
| test.cpp:10:3:10:6 | call to asin | Domain error in call to 'asin': the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
4+
| test.cpp:14:3:14:6 | call to asin | Domain error in call to 'asin': the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
5+
| test.cpp:15:3:15:7 | call to atanh | Domain error in call to 'atanh': the argument has a range -1.1...-1.1 which is outside the domain of this function (-1.0...1.0). |
6+
| test.cpp:17:3:17:7 | call to atanh | Domain error in call to 'atanh': the argument has a range 1.1...1.1 which is outside the domain of this function (-1.0...1.0). |
7+
| test.cpp:18:3:18:7 | call to atan2 | Domain error in call to 'atan2': both arguments are equal to zero. |
8+
| test.cpp:22:3:22:5 | call to pow | Domain error in call to 'pow': both arguments are equal to zero. |
9+
| test.cpp:26:3:26:5 | call to pow | Domain error in call to 'pow': both arguments are less than zero. |
10+
| test.cpp:31:3:31:7 | call to acosh | Domain error in call to 'acosh': argument is less than 1. |
11+
| test.cpp:32:3:32:7 | call to ilogb | Domain error in call to 'ilogb': argument is equal to zero. |
12+
| test.cpp:35:3:35:5 | call to log | Domain error in call to 'log': argument is negative. |
13+
| test.cpp:37:3:37:7 | call to log10 | Domain error in call to 'log10': argument is negative. |
14+
| test.cpp:39:3:39:6 | call to log2 | Domain error in call to 'log2': argument is negative. |
15+
| test.cpp:41:3:41:6 | call to sqrt | Domain error in call to 'sqrt': argument is negative. |
16+
| test.cpp:44:3:44:7 | call to log1p | Domain error in call to 'log1p': argument is less than 1. |
17+
| test.cpp:46:3:46:6 | call to logb | Domain error in call to 'logb': argument is equal to zero. |
18+
| test.cpp:49:3:49:8 | call to tgamma | Domain error in call to 'tgamma': argument is equal to zero. |
19+
| test.cpp:55:3:55:5 | call to abs | Range error in call to 'abs': argument is most negative number. |
20+
| test.cpp:56:3:56:6 | call to fmod | Domain error in call to 'fmod': y is 0. |
21+
| test.cpp:58:3:58:7 | call to frexp | Unspecified error in call to 'frexp': Arg is Nan or infinity and exp is unspecified as a result. |
22+
| test.cpp:59:3:59:7 | call to frexp | Unspecified error in call to 'frexp': Arg is Nan or infinity and exp is unspecified as a result. |
23+
| test.cpp:63:3:63:7 | call to atanh | Pole error in call to 'atanh': argument is plus or minus 1. |
24+
| test.cpp:64:3:64:7 | call to atanh | Pole error in call to 'atanh': argument is plus or minus 1. |
25+
| test.cpp:65:3:65:5 | call to log | Pole error in call to 'log': argument is equal to zero. |
26+
| test.cpp:66:3:66:7 | call to log10 | Pole error in call to 'log10': argument is equal to zero. |
27+
| test.cpp:67:3:67:6 | call to log2 | Pole error in call to 'log2': argument is equal to zero. |
28+
| test.cpp:68:3:68:7 | call to log1p | Pole error in call to 'log1p': argument is equal to negative one. |
29+
| test.cpp:70:3:70:5 | call to pow | Pole error in call to 'pow': base is zero and exp is negative. |
30+
| test.cpp:71:3:71:8 | call to lgamma | Pole error in call to 'lgamma': argument is equal to zero. |

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.