fix handling of infinity in name/2 and friends.

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1721 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2006-11-16 14:26:00 +00:00
parent a728bed4f8
commit 1d49a93d76
2 changed files with 19 additions and 9 deletions

View File

@ -11,8 +11,11 @@
* File: stdpreds.c * * File: stdpreds.c *
* comments: General-purpose C implemented system predicates * * comments: General-purpose C implemented system predicates *
* * * *
* Last rev: $Date: 2006-11-08 01:56:47 $,$Author: vsc $ * * Last rev: $Date: 2006-11-16 14:26:00 $,$Author: vsc $ *
* $Log: not supported by cvs2svn $ * $Log: not supported by cvs2svn $
* Revision 1.112 2006/11/08 01:56:47 vsc
* fix argument order in db statistics.
*
* Revision 1.111 2006/11/06 18:35:04 vsc * Revision 1.111 2006/11/06 18:35:04 vsc
* 1estranha * 1estranha
* *
@ -612,6 +615,14 @@ get_char_from_string(int s)
} }
#ifndef INFINITY
#define INFINITY (1.0/0.0)
#endif
#ifndef NAN
#define NAN (0.0/0.0)
#endif
static Term static Term
get_num(char *t) get_num(char *t)
{ {
@ -630,20 +641,18 @@ get_num(char *t)
sign = -1; sign = -1;
} }
if(strcmp(t,"inf") == 0) { if(strcmp(t,"inf") == 0) {
Term ta[1];
ta[0] = MkAtomTerm(Yap_LookupAtom("inf"));
if (sign > 0) { if (sign > 0) {
return(Yap_MkApplTerm(Yap_MkFunctor(AtomPlus, 1), 1, ta)); return MkFloatTerm(INFINITY);
} else {
return MkFloatTerm(-INFINITY);
} }
return(Yap_MkApplTerm(Yap_MkFunctor(AtomMinus, 1), 1, ta));
} }
if(strcmp(t,"nan") == 0) { if(strcmp(t,"nan") == 0) {
Term ta[1];
ta[0] = MkAtomTerm(Yap_LookupAtom("nan"));
if (sign > 0) { if (sign > 0) {
return(Yap_MkApplTerm(Yap_MkFunctor(AtomPlus, 1), 1, ta)); return MkFloatTerm(NAN);
} else {
return MkFloatTerm(-NAN);
} }
return(Yap_MkApplTerm(Yap_MkFunctor(AtomMinus, 1), 1, ta));
} }
} }
if (cur_char_ptr[0] == '\0') if (cur_char_ptr[0] == '\0')

View File

@ -16,6 +16,7 @@
<h2>Yap-5.1.2:</h2> <h2>Yap-5.1.2:</h2>
<ul> <ul>
<li> FIXED: +inf is a number (obs from Trevor Walker).</li>
<li> FIXED: if peek finds EOF get should not return an error (obs <li> FIXED: if peek finds EOF get should not return an error (obs
from Miguel Filgueiras).</li> from Miguel Filgueiras).</li>
<li> FIXED: allow overflows on timestamps.</li> <li> FIXED: allow overflows on timestamps.</li>