format/3could crash with certain parameters to the ‘~*’ construct (and the equivalent inline form). For some format control options, this was fixed by restricting the magnitude of the ‘~*’ parameter.
append(L1,L2,L3)if called with
L1not a proper list.
(/)/2, which implicitly take floating point values, a float overflow error will now be thrown if the argument evaluates to a large integer that will not fit in a floating point value.
In some cases this now throws an error, where earlier versions
computed a sensible result, e.g.
X is 1/(1<<1024) would
X = 0.0 but now throws an error (because the value of
(1<<1024) is a large integer that does not fit in a floating
SP_get_float()now fails if the argument term is a large integer that does not fit in a C double. It used to return an infinity value.
+float, or code that use the
library(structs)floating point types, will now give an error if the argument is a large integer that does not fit in the destination type.
SP_put_float(-0.0)now creates an ordinary (unsigned) floating point zero.
-float, or code that use the
library(structs)floating point types, will now throw an error if the value is not finite. Negative zero will treated as an ordinary (unsigned) floating point zero.
This means that a call to a foreign function can throw an exception when the function returns to Prolog, if it attempts to return a non-finite result.
+integer, or code that uses the
library(structs)integer types, will now give an error if the argument is a large integer that does not fit in the destination type.
spld --extended-rtfailed unless --license-file was specified. Now it tries to find the license in the “usual” places.
timeout/1option of various predicates and the
spfzoption -time Time together with one-solutions search, no solution was reported at time-out, even if some solution had been found during optimization search.
dif/2and reified constraints.
This was fixed already in 4.3.3.