diff options
author | Ian Jauslin <ian@jauslin.org> | 2022-06-14 09:26:07 +0200 |
---|---|---|
committer | Ian Jauslin <ian@jauslin.org> | 2022-06-14 09:46:36 +0200 |
commit | 3f0510629e422e979b57d3f93791937912a4183a (patch) | |
tree | bf2589b2689044261b0cd4d9e6b3082194fdd9e9 /src/rational_int.c | |
parent | 469bdc80712dbf9c12562059dc4594620b59a076 (diff) |
The update to version 1.5 is rather substantial, and introduces some minor
backward-incompatibilities:
* The header "#!symbols" has been replaced by "#!virtual_fields"
* Multiplying polynomials using the '*' symbol is no longer supported (or,
rather, the symbolic capabilities of meankondo were enhanced, and the
syntax has been changed).
* 'meantools exp' has been removed (its functionality is now handled by
other means)
* 'meantoolds derive' has been replaced by 'meantools differentiate'
* The symbolic capabilities were enhanced: polynomials can now be
multiplied, added, exponentiated, and their logarithms can be taken
directly in the configuration file.
* The flow equation can now be processed after being computed using the
various "#!postprocess_*" entries.
* Deprecated kondo_preprocess.
* Compute the mean using an LU decomposition if possible.
* More detailed checks for syntax errors in configuration file.
* Check that different '#!group' entries are indeed uncorrelated.
* New flags in meankondo: '-p' and '-A'.
* New tool: meantools expand.
* Improve conversion to LaTeX using meantools-convert
* Assign terms randomly to different threads.
* Created vim files to implement syntax highlighting for configuration
files.
* Multiple bug fixes
Diffstat (limited to 'src/rational_int.c')
-rw-r--r-- | src/rational_int.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/rational_int.c b/src/rational_int.c index 7aab561..f3e5475 100644 --- a/src/rational_int.c +++ b/src/rational_int.c @@ -1,5 +1,5 @@ /* -Copyright 2015 Ian Jauslin +Copyright 2015-2022 Ian Jauslin Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ limitations under the License. #include <mpfr.h> #include "istring.h" #include "array.h" +#include "parse_file.h" Q quot(long int p, long int q){ Q ret; @@ -171,13 +172,18 @@ int str_to_Q(char* str, Q* num){ int mode; char* buffer=calloc(str_len(str)+1,sizeof(char)); char* buffer_ptr=buffer; + int ret; *num=quot(0,1); mode=PP_NUMERATOR_MODE; for(ptr=str;*ptr!='\0';ptr++){ if(*ptr=='/'){ - sscanf(buffer,"%ld",&((*num).numerator)); + ret=read_long_int(buffer,&((*num).numerator)); + if(ret<0){ + fprintf(stderr,"syntax error: numerator should be an integer, got '%s' in '%s'\n",buffer,str); + exit(-1); + } buffer_ptr=buffer; *buffer_ptr='\0'; mode=PP_DENOMINATOR_MODE; @@ -189,10 +195,18 @@ int str_to_Q(char* str, Q* num){ // last step if(mode==PP_NUMERATOR_MODE){ - sscanf(buffer,"%ld",&((*num).numerator)); + ret=read_long_int(buffer,&((*num).numerator)); + if(ret<0){ + fprintf(stderr,"syntax error: numerator should be an integer, got '%s' in '%s'\n",buffer,str); + exit(-1); + } } else if(mode==PP_DENOMINATOR_MODE){ - sscanf(buffer,"%ld",&((*num).denominator)); + ret=read_long_int(buffer,&((*num).denominator)); + if(ret<0){ + fprintf(stderr,"syntax error: numerator should be an integer, got '%s' in '%s'\n",buffer,str); + exit(-1); + } } free(buffer); |