NaN and Inf in files

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

NaN and Inf in files

Mario Storti-4

It seems that Octave refuses to read NaN and Inf's in files. For
instance it refuses to load this file:

> ================================================================
> # name: a
> # type: matrix
> # rows: 5
> # columns: 5
>  Infinity 0.791930556297302 0.464792340993881 0.911653220653534 0.543378531932831
>  0.854524254798889 0.715068995952606 0.54412055015564 0.154283925890923 0.98368227481842
>  0.021692018955946 0.367257356643677 0.281857639551163 0.572634100914001 0.721297860145569
>  0.775609135627747 0.309314996004105 0.23733352124691 0.0354556851089001 0.969821155071259
>  0.853041291236877 0.251728385686874 0.284725338220596 0.314096361398697 0.81235659122467
> ================================================================

with this message:

> octave> load data
> error: load: failed to load matrix constant
> error: load: reading file data
> error: evaluating index expression near line 13, column 1
> octave>

The file was saved from Octave  itself.  If I  remove the Infinity and
put some number then it runs fine.

Is   this  a bug?  Should  I  send  a  full  bug-report?  Below is the
configuration as reported by bug_report.

Mario

%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%
Mario Alberto Storti                           | Fax: (54)(42) 55.09.44 |
Centro Internacional de Metodos Computacionales| Tel: (54)(42) 55.91.75 |
     en Ingenieria - CIMEC                     |........................|  
INTEC, Guemes 3450 - 3000 Santa Fe, Argentina                           |
Reply: [hidden email], http://venus.unl.edu.ar/gtm-eng.html |


> Configuration (please do not edit this section):
> -----------------------------------------------

> uname output:     Linux minerva 2.0.32 #1 Wed Nov 19 00:46:45 EST 1997 i586 unknown
> configure opts:   --enable-shared --enable-lite-kernel --enable-dl
> Fortran compiler:
> FFLAGS:          
> F2C:              f2c
> F2CFLAGS:        
> FLIBS:            -lf2c
> CPPFLAGS:        
> INCFLAGS:         -I/usr/local/include -I/usr/local/include/octave-2.0.11
> C compiler:       gcc, version 2.7.2.3
> CFLAGS:           -DHAVE_CONFIG_H  -g -O2 -Wall
> CPICFLAG:         -fPIC
> C++ compiler:     c++, version 2.7.2.3
> CXXFLAGS:         -DHAVE_CONFIG_H -fno-rtti -fno-implicit-templates -g -O2 -Wall
> CXXPICFLAG:       -fPIC
> LDFLAGS:          -g
> LIBFLAGS:         -L/usr/local/lib/octave-2.0.11
> RLD_FLAG:         -Xlinker -rpath -Xlinker /usr/local/lib/octave-2.0.11
> TERMLIBS:         -lncurses
> LIBS:            
> LEXLIB:          
> LIBPLPLOT:        
> LIBDLFCN:         ./readline/libreadline.a
> DEFS:

>   -DOCTAVE_SOURCE=1 -DSEPCHAR=':' -DSEPCHAR_STR=":" -DUSE_GNU_INFO=1
>   -DUSE_READLINE=1 -DF77_APPEND_UNDERSCORE=1 -DF77_APPEND_UNDERSCORE=1
>   -DOCTAVE_LITE=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4
>   -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DSTDC_HEADERS=1 -DHAVE_DIRENT_H=1
>   -DTIME_WITH_SYS_TIME=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_ASSERT_H=1
>   -DHAVE_CURSES_H=1 -DHAVE_DLFCN_H=1 -DHAVE_FCNTL_H=1 -DHAVE_FLOAT_H=1
>   -DHAVE_FNMATCH_H=1 -DHAVE_GLOB_H=1 -DHAVE_GRP_H=1 -DHAVE_LIMITS_H=1
>   -DHAVE_MEMORY_H=1 -DHAVE_NAN_H=1 -DHAVE_NCURSES_H=1 -DHAVE_PWD_H=1
>   -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_PARAM_H=1
>   -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TIME_H=1
>   -DHAVE_SYS_TIMES_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_UTSNAME_H=1
>   -DHAVE_TERMCAP_H=1 -DHAVE_TERMIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_UNISTD_H=1
>   -DHAVE_VARARGS_H=1 -DHAVE_ATEXIT=1 -DHAVE_BCOPY=1 -DHAVE_BZERO=1
>   -DHAVE_DUP2=1 -DHAVE_ENDGRENT=1 -DHAVE_ENDPWENT=1 -DHAVE_EXECVP=1
>   -DHAVE_FCNTL=1 -DHAVE_FORK=1 -DHAVE_GETCWD=1 -DHAVE_GETEGID=1
>   -DHAVE_GETEUID=1 -DHAVE_GETGID=1 -DHAVE_GETGRENT=1 -DHAVE_GETGRGID=1
>   -DHAVE_GETGRNAM=1 -DHAVE_GETHOSTNAME=1 -DHAVE_GETPGRP=1 -DHAVE_GETPID=1
>   -DHAVE_GETPPID=1 -DHAVE_GETPWENT=1 -DHAVE_GETPWNAM=1 -DHAVE_GETPWUID=1
>   -DHAVE_GETUID=1 -DHAVE_GETWD=1 -DHAVE_LSTAT=1 -DHAVE_MEMMOVE=1
>   -DHAVE_MKDIR=1 -DHAVE_MKFIFO=1 -DHAVE_ON_EXIT=1 -DHAVE_PIPE=1
>   -DHAVE_PUTENV=1 -DHAVE_RENAME=1 -DHAVE_RINDEX=1 -DHAVE_RMDIR=1
>   -DHAVE_SETGRENT=1 -DHAVE_SETPWENT=1 -DHAVE_SETVBUF=1 -DHAVE_SIGACTION=1
>   -DHAVE_SIGPENDING=1 -DHAVE_SIGPROCMASK=1 -DHAVE_SIGSUSPEND=1
>   -DHAVE_STAT=1 -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1
>   -DHAVE_STRNCASECMP=1 -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1 -DHAVE_UNLINK=1
>   -DHAVE_USLEEP=1 -DHAVE_VFPRINTF=1 -DHAVE_VSPRINTF=1 -DHAVE_WAITPID=1
>   -DHAVE_PROGRAM_INVOCATION_NAME=1 -DHAVE_LIBDL=1 -DHAVE_DLOPEN=1
>   -DHAVE_DLSYM=1 -DHAVE_DLERROR=1 -DHAVE_DLCLOSE=1 -DWITH_DL=1
>   -DWITH_DYNAMIC_LINKING=1 -DHAVE_LIBM=1 -DHAVE_FINITE=1 -DHAVE_ISNAN=1
>   -DHAVE_ISINF=1 -DHAVE_ACOSH=1 -DHAVE_ASINH=1 -DHAVE_ATANH=1 -DHAVE_ERF=1
>   -DHAVE_ERFC=1 -DHAVE_ST_BLKSIZE=1 -DHAVE_ST_BLOCKS=1 -DHAVE_ST_RDEV=1
>   -DHAVE_TZNAME=1 -DHAVE_GR_PASSWD=1 -DEXCEPTION_IN_MATH=1 -DRETSIGTYPE=void
>   -DSYS_SIGLIST_DECLARED=1 -DHAVE_SYS_SIGLIST=1 -DHAVE_POSIX_SIGNALS=1
>   -DHAVE_GETRUSAGE=1 -DHAVE_TIMES=1

> User-preferences (please do not edit this section):
> --------------------------------------------------

>   EDITOR = "emacsclient"
>   IMAGEPATH = ".:/usr/local/share/octave/2.0.11/imagelib//"
>   INFO_FILE = "/usr/local/info/octave.info"
>   LOADPATH = ".:/usr/local/libexec/octave/2.0.11//:/u/mstorti/OCTAVE/TOOLS//:/u/mstorti/SHIP/INTEF/RUN/TOOLS/:/usr/local/share/octave/2.0.11/m//:/usr/local/share/octave/site/"
>   OCTAVE_VERSION = "2.0.11"
>   PAGER = "less -e -P'-- less ?pB(%pB\\%):--. (f)orward, (b)ack, (q)uit$'"
>   PS1 = "\\s> "
>   PS2 = "> "
>   automatic_replot = 0
>   whitespace_in_literal_matrix = ""
>   default_save_format = "ascii"
>   do_fortran_indexing = 0
>   empty_list_elements_ok = 1
>   eps = 2.22045e-16
>   gnuplot_binary = "gnuplot -geometry 300x400+1+1"
>   ignore_function_time_stamp = "system"
>   implicit_str_to_num_ok = 1
>   ok_to_lose_imaginary_part = "warn"
>   output_max_field_width = 10
>   output_precision = 5
>   page_screen_output = 0
>   prefer_column_vectors = 1
>   prefer_zero_one_indexing = 0
>   print_answer_id_name = 1
>   print_empty_dimensions = 1
>   propagate_empty_matrices = 1
>   resize_on_range_error = 1
>   return_last_computed_value = 0
>   save_precision = 15
>   silent_functions = 0
>   split_long_rows = 1
>   treat_neg_dim_as_zero = 0
>   warn_assign_as_truth_value = 1
>   warn_comma_in_global_decl = 1
>   warn_divide_by_zero = 1


Reply | Threaded
Open this post in threaded view
|

Re: NaN and Inf in files

Frederic Gobry
Hi !

In fact I had the same problem a few days ago, and sent a bug report : jwe
told me it was a know bug with no quick fix. I don't know if this can apply
to your problem, but I finally saved 2 matrices, the one with the
non-(inf|nan) informations, the other containing the coordinates of the
inf|nan points, in order to recreate the full matrix afterward.

Hope this help...

--
    Frederic GOBRY                  IDIAP
                               Rue du Simplon 4,
  Research Assistant          CH 1920 - Martigny
Machine Learning Group      Tel: +41 27 721 77 31


Reply | Threaded
Open this post in threaded view
|

RE: NaN and Inf in files

Ted.Harding
In reply to this post by Mario Storti-4

On 06-Apr-98 Mario Storti wrote:
>
> It seems that Octave refuses to read NaN and Inf's in files.

It would be very useful to have this facility. For instance I use "NaN" for
missing data values.

This hasn't usually mattered to me because I habitually create m-files for
reading in data, and m-files with NaNs work OK. It is no big deal either to
get octave to write m-files for saving computed data in, but using "save" would
be easier!

Thanks,
Ted.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <[hidden email]>
Date: 06-Apr-98                                       Time: 15:54:39
--------------------------------------------------------------------


Reply | Threaded
Open this post in threaded view
|

RE: NaN and Inf in files

John W. Eaton-6
On  6-Apr-1998, (Ted Harding) <[hidden email]> wrote:

|
| On 06-Apr-98 Mario Storti wrote:
| >
| > It seems that Octave refuses to read NaN and Inf's in files.
|
| It would be very useful to have this facility. For instance I use "NaN" for
| missing data values.
|
| This hasn't usually mattered to me because I habitually create
| m-files for reading in data, and m-files with NaNs work OK. It is no
| big deal either to get octave to write m-files for saving computed
| data in, but using "save" would be easier!

OK, I should have said that there is no easy way to fix this in the
Octave sources.  But there is a relatively easy way to fix it, at
least for someone familiar with the code in floatconv.c in the libio
code distributed with the GNU libc and libstdc++.  Just make that code
understand how to read the same special tokens that are produced when
writing Inf and NaN values.  For example, on some other systems, when
doing "e", "f", or "g" conversions, the floating point conversion code
understands "Inf" or "Infinity" or "NaN" or "NaNQ" etc.

So I think the bug is really in libio and should be fixed there.
Can someone who wants this feature to work in Octave please report the
problem to the libc/libstdc++ maintainers?  Here is a simple example
(make this work in libio and I think the problem will be solved):

  #include <stdio.h>

  int
  main (void)
  {
    char buf[100];
    double inf = 1.0 / 0.0;
    double nan = 0.0 / 0.0;
    sprintf (buf, "%f %f", inf, nan);
    printf ("%s\n", buf);
    inf = nan = 0.0;
    sscanf (buf, "%lf %lf", &inf, &nan);
    printf ("%f %f\n", inf, nan);
    return 0;
  }

BTW, I tried fixing this once, but got lost in the floatconv code.
Good luck!

jwe