1 #include <stan/math/prim.hpp>
2 #include <gtest/gtest.h>
3 #include <cmath>
4
TEST(ProbNormal,cdf_log_matches_lcdf)5 TEST(ProbNormal, cdf_log_matches_lcdf) {
6 double y = 0.8;
7 double mu = 1.1;
8 double sigma = 2.3;
9
10 EXPECT_FLOAT_EQ((stan::math::normal_lcdf(y, mu, sigma)),
11 (stan::math::normal_cdf_log(y, mu, sigma)));
12 EXPECT_FLOAT_EQ(
13 (stan::math::normal_lcdf<double, double, double>(y, mu, sigma)),
14 (stan::math::normal_cdf_log<double, double, double>(y, mu, sigma)));
15 }
16
TEST(ProbNormal,lcdf_tails)17 TEST(ProbNormal, lcdf_tails) {
18 using stan::math::normal_lcdf;
19 using std::exp;
20
21 EXPECT_FLOAT_EQ(4.60535300958196e-308, exp(normal_lcdf(-37.5, 0, 1)));
22 EXPECT_FLOAT_EQ(5.72557122252458e-300, exp(normal_lcdf(-37, 0, 1)));
23 EXPECT_FLOAT_EQ(5.54472571307484e-292, exp(normal_lcdf(-36.5, 0, 1)));
24 EXPECT_FLOAT_EQ(4.18262406579728e-284, exp(normal_lcdf(-36, 0, 1)));
25 EXPECT_FLOAT_EQ(2.45769154066194e-276, exp(normal_lcdf(-35.5, 0, 1)));
26 EXPECT_FLOAT_EQ(1.12491070647241e-268, exp(normal_lcdf(-35, 0, 1)));
27 EXPECT_FLOAT_EQ(4.01072896657726e-261, exp(normal_lcdf(-34.5, 0, 1)));
28 EXPECT_FLOAT_EQ(1.11389878557438e-253, exp(normal_lcdf(-34, 0, 1)));
29 EXPECT_FLOAT_EQ(2.40983869512039e-246, exp(normal_lcdf(-33.5, 0, 1)));
30 EXPECT_FLOAT_EQ(4.06118562091586e-239, exp(normal_lcdf(-33, 0, 1)));
31 EXPECT_FLOAT_EQ(5.33142435967881e-232, exp(normal_lcdf(-32.5, 0, 1)));
32 EXPECT_FLOAT_EQ(5.4520806035124e-225, exp(normal_lcdf(-32, 0, 1)));
33 EXPECT_FLOAT_EQ(4.34323260103177e-218, exp(normal_lcdf(-31.5, 0, 1)));
34 EXPECT_FLOAT_EQ(2.6952500812005e-211, exp(normal_lcdf(-31, 0, 1)));
35 EXPECT_FLOAT_EQ(1.30293791317808e-204, exp(normal_lcdf(-30.5, 0, 1)));
36 EXPECT_FLOAT_EQ(4.90671392714819e-198, exp(normal_lcdf(-30, 0, 1)));
37 EXPECT_FLOAT_EQ(1.43947455222918e-191, exp(normal_lcdf(-29.5, 0, 1)));
38 EXPECT_FLOAT_EQ(3.28978526670438e-185, exp(normal_lcdf(-29, 0, 1)));
39 EXPECT_FLOAT_EQ(5.85714125380634e-179, exp(normal_lcdf(-28.5, 0, 1)));
40 EXPECT_FLOAT_EQ(8.12386946965943e-173, exp(normal_lcdf(-28, 0, 1)));
41 EXPECT_FLOAT_EQ(8.77817055687808e-167, exp(normal_lcdf(-27.5, 0, 1)));
42 EXPECT_FLOAT_EQ(7.38948100688502e-161, exp(normal_lcdf(-27, 0, 1)));
43 EXPECT_FLOAT_EQ(4.84616266030332e-155, exp(normal_lcdf(-26.5, 0, 1)));
44 EXPECT_FLOAT_EQ(2.47606331550339e-149, exp(normal_lcdf(-26, 0, 1)));
45 EXPECT_FLOAT_EQ(9.85623651896393e-144, exp(normal_lcdf(-25.5, 0, 1)));
46 EXPECT_FLOAT_EQ(3.05669670638256e-138, exp(normal_lcdf(-25, 0, 1)));
47 EXPECT_FLOAT_EQ(7.38570686148941e-133, exp(normal_lcdf(-24.5, 0, 1)));
48 EXPECT_FLOAT_EQ(1.3903921185497e-127, exp(normal_lcdf(-24, 0, 1)));
49 EXPECT_FLOAT_EQ(2.03936756324998e-122, exp(normal_lcdf(-23.5, 0, 1)));
50 EXPECT_FLOAT_EQ(2.33063700622065e-117, exp(normal_lcdf(-23, 0, 1)));
51 EXPECT_FLOAT_EQ(2.07531079906636e-112, exp(normal_lcdf(-22.5, 0, 1)));
52 EXPECT_FLOAT_EQ(1.43989243514508e-107, exp(normal_lcdf(-22, 0, 1)));
53 EXPECT_FLOAT_EQ(7.78439707718263e-103, exp(normal_lcdf(-21.5, 0, 1)));
54 EXPECT_FLOAT_EQ(3.27927801897904e-98, exp(normal_lcdf(-21, 0, 1)));
55 EXPECT_FLOAT_EQ(1.0764673258791e-93, exp(normal_lcdf(-20.5, 0, 1)));
56 EXPECT_FLOAT_EQ(2.75362411860623e-89, exp(normal_lcdf(-20, 0, 1)));
57 EXPECT_FLOAT_EQ(5.48911547566041e-85, exp(normal_lcdf(-19.5, 0, 1)));
58 EXPECT_FLOAT_EQ(8.52722395263098e-81, exp(normal_lcdf(-19, 0, 1)));
59 EXPECT_FLOAT_EQ(1.03236986895633e-76, exp(normal_lcdf(-18.5, 0, 1)));
60 EXPECT_FLOAT_EQ(9.74094891893715e-73, exp(normal_lcdf(-18, 0, 1)));
61 EXPECT_FLOAT_EQ(7.16345876623504e-69, exp(normal_lcdf(-17.5, 0, 1)));
62 EXPECT_FLOAT_EQ(4.10599620209891e-65, exp(normal_lcdf(-17, 0, 1)));
63 EXPECT_FLOAT_EQ(1.83446300316473e-61, exp(normal_lcdf(-16.5, 0, 1)));
64 EXPECT_FLOAT_EQ(6.38875440053809e-58, exp(normal_lcdf(-16, 0, 1)));
65 EXPECT_FLOAT_EQ(1.73446079179387e-54, exp(normal_lcdf(-15.5, 0, 1)));
66 EXPECT_FLOAT_EQ(3.67096619931275e-51, exp(normal_lcdf(-15, 0, 1)));
67 EXPECT_FLOAT_EQ(6.05749476441522e-48, exp(normal_lcdf(-14.5, 0, 1)));
68 EXPECT_FLOAT_EQ(7.7935368191928e-45, exp(normal_lcdf(-14, 0, 1)));
69 EXPECT_FLOAT_EQ(7.81880730565789e-42, exp(normal_lcdf(-13.5, 0, 1)));
70 EXPECT_FLOAT_EQ(6.11716439954988e-39, exp(normal_lcdf(-13, 0, 1)));
71 EXPECT_FLOAT_EQ(3.73256429887771e-36, exp(normal_lcdf(-12.5, 0, 1)));
72 EXPECT_FLOAT_EQ(1.77648211207768e-33, exp(normal_lcdf(-12, 0, 1)));
73 EXPECT_FLOAT_EQ(6.59577144611367e-31, exp(normal_lcdf(-11.5, 0, 1)));
74 EXPECT_FLOAT_EQ(1.91065957449868e-28, exp(normal_lcdf(-11, 0, 1)));
75 EXPECT_FLOAT_EQ(4.31900631780923e-26, exp(normal_lcdf(-10.5, 0, 1)));
76 EXPECT_FLOAT_EQ(7.61985302416053e-24, exp(normal_lcdf(-10, 0, 1)));
77 EXPECT_FLOAT_EQ(1.04945150753626e-21, exp(normal_lcdf(-9.5, 0, 1)));
78 EXPECT_FLOAT_EQ(1.12858840595384e-19, exp(normal_lcdf(-9, 0, 1)));
79 EXPECT_FLOAT_EQ(9.47953482220332e-18, exp(normal_lcdf(-8.5, 0, 1)));
80 EXPECT_FLOAT_EQ(6.22096057427178e-16, exp(normal_lcdf(-8, 0, 1)));
81 EXPECT_FLOAT_EQ(3.1908916729109e-14, exp(normal_lcdf(-7.5, 0, 1)));
82 EXPECT_FLOAT_EQ(1.27981254388584e-12, exp(normal_lcdf(-7, 0, 1)));
83 EXPECT_FLOAT_EQ(4.01600058385912e-11, exp(normal_lcdf(-6.5, 0, 1)));
84 EXPECT_FLOAT_EQ(9.86587645037698e-10, exp(normal_lcdf(-6, 0, 1)));
85 EXPECT_FLOAT_EQ(1.89895624658877e-08, exp(normal_lcdf(-5.5, 0, 1)));
86 EXPECT_FLOAT_EQ(2.86651571879194e-07, exp(normal_lcdf(-5, 0, 1)));
87 EXPECT_FLOAT_EQ(3.39767312473006e-06, exp(normal_lcdf(-4.5, 0, 1)));
88 EXPECT_FLOAT_EQ(3.16712418331199e-05, exp(normal_lcdf(-4, 0, 1)));
89 EXPECT_FLOAT_EQ(0.000232629079035525, exp(normal_lcdf(-3.5, 0, 1)));
90 EXPECT_FLOAT_EQ(0.00134989803163009, exp(normal_lcdf(-3, 0, 1)));
91 EXPECT_FLOAT_EQ(0.00620966532577613, exp(normal_lcdf(-2.5, 0, 1)));
92 EXPECT_FLOAT_EQ(0.0227501319481792, exp(normal_lcdf(-2, 0, 1)));
93 EXPECT_FLOAT_EQ(0.0668072012688581, exp(normal_lcdf(-1.5, 0, 1)));
94 EXPECT_FLOAT_EQ(0.158655253931457, exp(normal_lcdf(-1, 0, 1)));
95 EXPECT_FLOAT_EQ(0.308537538725987, exp(normal_lcdf(-0.5, 0, 1)));
96 EXPECT_FLOAT_EQ(0.5, exp(normal_lcdf(0, 0, 1)));
97 EXPECT_FLOAT_EQ(0.691462461274013, exp(normal_lcdf(0.5, 0, 1)));
98 EXPECT_FLOAT_EQ(0.841344746068543, exp(normal_lcdf(1, 0, 1)));
99 EXPECT_FLOAT_EQ(0.933192798731142, exp(normal_lcdf(1.5, 0, 1)));
100 EXPECT_FLOAT_EQ(0.977249868051821, exp(normal_lcdf(2, 0, 1)));
101 EXPECT_FLOAT_EQ(0.993790334674224, exp(normal_lcdf(2.5, 0, 1)));
102 EXPECT_FLOAT_EQ(0.99865010196837, exp(normal_lcdf(3, 0, 1)));
103 EXPECT_FLOAT_EQ(0.999767370920964, exp(normal_lcdf(3.5, 0, 1)));
104 EXPECT_FLOAT_EQ(0.999968328758167, exp(normal_lcdf(4, 0, 1)));
105 EXPECT_FLOAT_EQ(0.999996602326875, exp(normal_lcdf(4.5, 0, 1)));
106 EXPECT_FLOAT_EQ(0.999999713348428, exp(normal_lcdf(5, 0, 1)));
107 EXPECT_FLOAT_EQ(0.999999981010438, exp(normal_lcdf(5.5, 0, 1)));
108 EXPECT_FLOAT_EQ(0.999999999013412, exp(normal_lcdf(6, 0, 1)));
109 EXPECT_FLOAT_EQ(0.99999999995984, exp(normal_lcdf(6.5, 0, 1)));
110 EXPECT_FLOAT_EQ(0.99999999999872, exp(normal_lcdf(7, 0, 1)));
111 EXPECT_FLOAT_EQ(0.999999999999968, exp(normal_lcdf(7.5, 0, 1)));
112 EXPECT_FLOAT_EQ(0.999999999999999, exp(normal_lcdf(8, 0, 1)));
113 EXPECT_FLOAT_EQ(1, exp(normal_lcdf(8.5, 0, 1)));
114 EXPECT_FLOAT_EQ(1, exp(normal_lcdf(9, 0, 1)));
115 EXPECT_FLOAT_EQ(1, exp(normal_lcdf(9.5, 0, 1)));
116 EXPECT_FLOAT_EQ(1, exp(normal_lcdf(10, 0, 1)));
117 }
118