Instable evaluation of combined logical expressions
Jörg Bretschneider
Joerg.Bretschneider at eas.iis.fraunhofer.de
Fri Feb 13 07:46:06 CST 2009
Bug report for Octave 3.0.3 configured for i686-pc-msdosmsvc
Description:
-----------
Octave seems to evaluate all expressions in combined logical condition
expressions,
i.e. cond1 LOGICALOPERATOR cond2 (LOGICALOPERATOR ...)
even if the logical result of the condition is already determined by the
first condition
An error occurs if the syntactical validity of the second or further
conditions depends
on a FALSE value of the first condition, e.g. an index request into an
empty matrix.
It is not unusual to check the length of an array first in order to
request a condition
on some of its elements. The example works with Matlab for years, but
not Octave 3.0.x
Repeat-By:
---------
x=[]; if ~isempty(x) & x(1) ~= 0, disp('do something'), end
Fix:
---
A work around for this was to pose multiple separate IF conditions,
but this is not the preferred way, as octave can easily understand
that an AND expression is FALSE if its first condition is, as well
as an OR expression is TRUE if its first condition is, there may be
other instances but the first one is the most important case.
I had to adapt hundreds of lines of M-code to make it compatible.
Configuration (please do not edit this section):
-----------------------------------------------
uname output: Windows
configure opts:
Fortran compiler: fc-msvc
FFLAGS: -O2
F2C: @F2C@
F2CFLAGS: @F2CFLAGS@
FLIBS: -lhdf5 -lzlib -lf2c -lkernel32
CPPFLAGS: -I. -Ic:/Software/VCLibs/include
INCFLAGS: -I. -I. -I./liboctave -I./src -I./libcruft/misc
C compiler: cc-msvc, version
CFLAGS: -O2 -MD
CPICFLAG:
C++ compiler: cc-msvc, version
CXXFLAGS: -O2 -EHs -MD
CXXPICFLAG:
LD_CXX: cc-msvc
LDFLAGS:
LIBFLAGS: -L.
RLD_FLAG:
BLAS_LIBS: -llapack -lblas
FFTW_LIBS: -lfftw3
LIBS: -lreadline -lncurses -lhdf5 -lzlib -lws2_32 -lkernel32
LEXLIB:
LIBGLOB: -lglob
SED: /usr/bin/sed
DEFS:
-DPACKAGE_NAME="" -DPACKAGE_TARNAME="" -DPACKAGE_VERSION=""
-DPACKAGE_STRING="" -DPACKAGE_BUGREPORT="" -DOCTAVE_SOURCE=1
-D_GNU_SOURCE=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1
-DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1
-DHAVE_MEMORY_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1
-DHAVE_UNISTD_H=1 -DSEPCHAR=';' -DSEPCHAR_STR=";" -D__NO_MATH_INLINES=1
-DCXX_NEW_FRIEND_TEMPLATE_DECL=1 -DCXX_ISO_COMPLIANT_LIBRARY=1
-DCXX_ABI=unknown -DHAVE_QHULL=1 -DHAVE_PCRE=1 -DHAVE_ZLIB_H=1
-DHAVE_ZLIB=1 -DHAVE_HDF5_H=1 -DHAVE_HDF5=1 -DHAVE_H5GGET_NUM_OBJS=1
-D_HDF5USEDLL_=1 -DHAVE_FFTW3=1 -DHAVE_GLPK_H=1 -DHAVE_GLPK=1
-DHAVE_CURL_CURL_H=1 -DHAVE_CURL=1 -DHAVE_IEEE754_DATA_FORMAT=1
-DF77_FUNC(name,NAME)=name ## _ -DF77_FUNC_(name,NAME)=name ## __
-DHAVE_BLAS=1 -DHAVE_SUITESPARSE_UMFPACK_H=1 -DHAVE_UMFPACK=1
-DUMFPACK_SEPARATE_SPLIT=1 -DHAVE_SUITESPARSE_COLAMD_H=1 -DHAVE_COLAMD=1
-DHAVE_SUITESPARSE_CCOLAMD_H=1 -DHAVE_CCOLAMD=1
-DHAVE_SUITESPARSE_CHOLMOD_H=1 -DHAVE_CHOLMOD=1
-DHAVE_SUITESPARSE_CS_H=1 -DHAVE_CXSPARSE=1 -Dmode_t=int -Dpid_t=int
-Duid_t=int -Dgid_t=int -DHAVE_DEV_T=1 -DHAVE_INO_T=1
-DHAVE_LONG_LONG_INT=1 -DHAVE_UNSIGNED_LONG_LONG_INT=1
-DHAVE_SIG_ATOMIC_T=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4
-DSIZEOF_LONG_LONG=8 -DHAVE_ALLOCA=1 -DNPOS=std::string::npos
-DHAVE_PLACEMENT_DELETE=1 -DSTDC_HEADERS=1 -DHAVE_ASSERT_H=1
-DHAVE_DIRECT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_FLOAT_H=1 -DHAVE_INTTYPES_H=1
-DHAVE_LIMITS_H=1 -DHAVE_LOCALE_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STDINT_H=1
-DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_STAT_H=1
-DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_UTIME_H=1 -DHAVE_UNISTD_H=1
-DHAVE_VARARGS_H=1 -DHAVE_SSTREAM=1 -DHAVE_GLOB_H=1 -DHAVE_FNMATCH_H=1
-DHAVE_CONIO_H=1 -DHAVE_ATEXIT=1 -DHAVE_CHMOD=1 -DHAVE_DUP2=1
-DHAVE_EXECVP=1 -DHAVE_GETCWD=1 -DHAVE_GETPID=1 -DHAVE__KBHIT=1
-DHAVE_MEMMOVE=1 -DHAVE_MKDIR=1 -DHAVE_PUTENV=1 -DHAVE_RAISE=1
-DHAVE_RENAME=1 -DHAVE_RMDIR=1 -DHAVE_SETLOCALE=1 -DHAVE_SETVBUF=1
-DHAVE_STAT=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRICMP=1
-DHAVE_STRNICMP=1 -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1 -DHAVE_UNLINK=1
-DHAVE_UTIME=1 -DHAVE_VFPRINTF=1 -DHAVE_VSPRINTF=1 -DHAVE_VSNPRINTF=1
-DHAVE__CHMOD=1 -DHAVE__SNPRINTF=1 -DHAVE__UTIME32=1
-DOCTAVE_HAVE_BROKEN_STRPTIME=1 -D_USE_MATH_DEFINES=1
-DHAVE_LOADLIBRARY_API=1 -DENABLE_DYNAMIC_LINKING=1 -DHAVE__FINITE=1
-DHAVE__ISNAN=1 -DHAVE__COPYSIGN=1 -DHAVE_DECL_SIGNBIT=0
-DHAVE_STRUCT_STAT_ST_RDEV=1 -DHAVE_DECL_TZNAME=1 -DHAVE_TZNAME=1
-DCLOSEDIR_VOID=1 -DMKDIR_TAKES_ONE_ARG=1 -DUSE_READLINE=1
-DRETSIGTYPE=void -DHAVE_DECL_SYS_SIGLIST=0
-DMUST_REINSTALL_SIGHANDLERS=1 -DRETSIGTYPE_IS_VOID=1
-DGNUPLOT_BINARY="pgnuplot"
User-preferences (please do not edit this section):
EDITOR = C:\Programme\Octave\tools\wscite\SciTE.exe
EXEC_PATH =
C:\Programme\Octave\msys\bin;C:\Programme\Octave\libexec\octave\3.0.3\site\exec\i686-pc-msdosmsvc;C:\Programme\Octave\libexec\octave\api-v32\site\exec\i686-pc-msdosmsvc;C:\Programme\Octave\libexec\octave\site\exec\i686-pc-msdosmsvc;C:\Programme\Octave\libexec\octave\3.0.3\exec\i686-pc-msdosmsvc;C:\Programme\Octave\bin;C:\Programme\Octave;C:\Programme\MiKTeX
2.7\miktex\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\wbem;c:\programme\citrix\system32\citrix\ima;c:\programme\citrix\system32\citrix\ima\subsystems;C:\WINDOWS\system32\citrix\ima;c:\programme\citrix\system32;C:\MATLAB\R2008a\bin;C:\MATLAB\R2008a\bin\win32;c:\matlab\6p1\bin\win32;c:\matlab\6p5\bin\win32;C:\Programme\Altium
Designer 6\System;c:\Programme\Microsoft SQL
Server\90\Tools\binn\;C:\Programme\Enabler\Server\Bin;C:\Programme\Artisan
Software Tools\Artisan Real-time Studio\ItsShadow\Exe;C:\Enabler\Server\Bin
IMAGE_PATH = .;C:\Programme\Octave\share\octave\3.0.3\imagelib
PAGER = less
PS1 = \s | \W\n>>
PS2 = >
PS4 = +
beep_on_error = 0
completion_append_char =
crash_dumps_octave_core = 1
echo_executing_commands = 0
fixed_point_format = 0
gnuplot_binary = pgnuplot
gnuplot_command_end =
gnuplot_command_plot = pl
gnuplot_command_replot = rep
gnuplot_command_splot = sp
gnuplot_command_title = t
gnuplot_command_using = u
gnuplot_command_with = w
history_file = h:\.octave_hist
history_size = 1024
ignore_function_time_stamp = system
info_file = C:\Programme\Octave\share\info\octave.info
info_program = info
makeinfo_program = makeinfo
max_recursion_depth = 256
output_max_field_width = 5
output_precision = 5
page_output_immediately = 0
page_screen_output = 1
print_answer_id_name = 1
print_empty_dimensions = 1
save_precision = 16
saving_history = 1
sighup_dumps_octave_core = 1
sigterm_dumps_octave_core = 1
silent_functions = 0
split_long_rows = 1
string_fill_char =
struct_levels_to_print = 2
suppress_verbose_help_message = 0
--
Jörg Bretschneider
Fraunhofer-Institut für Integrierte Schaltungen
Institutsteil Entwurfsautomatisierung
Zeunerstr. 38,
01069 Dresden,
Germany
Tel. ++49(0)351/4640-749
Fax: ++49(0)351/4640-703
Joerg.Bretschneider at eas.iis.fraunhofer.de
www.eas.iis.fraunhofer.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3627 bytes
Desc: S/MIME Cryptographic Signature
Url : https://www-old.cae.wisc.edu/pipermail/bug-octave/attachments/20090213/09aa128d/attachment.bin
More information about the Bug-octave
mailing list