X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Ft-test.q;fp=src%2Flanguage%2Fstats%2Ft-test.q;h=c448d52ea035c3d163bef9bf343a8d6b9609f904;hb=bd17d2af982332ee1791998361b1ac6731fe14fa;hp=d25477cdd153f27a55b8170f89bdf75e6020b75a;hpb=6c547fbd903690cc0e770ed9ffe78189b42de58a;p=pspp-builds.git diff --git a/src/language/stats/t-test.q b/src/language/stats/t-test.q index d25477cd..c448d52e 100644 --- a/src/language/stats/t-test.q +++ b/src/language/stats/t-test.q @@ -47,6 +47,7 @@ #include #include +#include "minmax.h" #include "xalloc.h" #include "xmemdup0.h" @@ -1109,10 +1110,14 @@ pscbox (struct t_test_proc *proc) for (i = 0; i < proc->n_pairs; i++) { struct pair *pair = &proc->pairs[i]; + double df = pair->n - 2; double p, q; - double df = pair->n -2; - double correlation_t = (pair->correlation * sqrt (df) / - sqrt (1 - pow2 (pair->correlation))); + + /* corr2 will mathematically always be in the range [0, 1.0]. Inaccurate + calculations sometimes cause it to be slightly greater than 1.0, so + force it into the correct range to avoid NaN from sqrt(). */ + double corr2 = MIN (1.0, pow2 (pair->correlation)); + double correlation_t = pair->correlation * sqrt (df) / sqrt (1 - corr2); /* row headings */ tab_text_format (table, 0, i + 1, TAB_LEFT | TAT_TITLE,