<Previous version of Ox>

# Ox 3.40: new features and fixes

## New features and enhancements

- Added the ability to import oxo files that were generated from OxGauss files.
- Add RTLD_GLOBAL flag to dynamic loading on Linux. (Was needed to link to libdbi.)
- Added some ability for the symbol table to grow (but this can only happen at the external code level).

## Problems in version 3.30 which have been fixed in version 3.40:

- In program: `main(){while(1)0;}` the loop is executed only once, while it should be an infinite loop. This only happens if while is the first statement of the program and the last statement in the while loop evaluates to 0 (so quite unlikely).
- `dayofcalendar` rather than `dayofcalender` (but both now exist to maintain backward compatibility).
- `polyroots` of empty matrix now returns empty matrix instead of negative dimension error
- small fix in solvenle (SolveGMRes) to check if the residual norm is a missing value.
- In rare circumstances a call to `ols2c`/`ols2r` with singularity could lateron lead to an Out of memory error message.
- exit code specified in `exit()` was not used when running from the command line.
- vector == matrix crashes, e.g: `<1,1> == <1,1; 0,1; 1,0>`
- `x=zeros(1,0); x[0][]=1;` leads to crash (should leave x unchanged).
- `variance(<>)`, `correlation(<>)`, `standardize(<>)` gives out of memory error message.
- "%z" format did not work for sscan
- `<>.^2` crashes Ox. Note that `sqr(<>)` is not affected by this.
- The following don't work with empty matrices: `savemat` and complex functions (`cmul`, `cdiv`, etc.).
- `pacf` of 1`x`1 matrix doesn't work.
- `lib/longrun.ox`: LongRun() is printing negative long-run covariances as zero.
- printing a function prints the name (and address if it is an internal function, e.g. print(rann)). Specifying a format for this could lead to a crash.
- `quanbeta(x,1,1)` returns 0.5 instead of 1.
- Singularity decision in `olsr`/`olsc`/`decqr` was too stringent. Now it is based on `inverteps()` multiplied by the maximum diagonal element of X'X (previously it just used sqrt(inverteps()). Also, the warning for scaling is now given when the ratio of the largest to the smallest diagonal element of X'X is less than `inverteps()` (previously, it was given when the ratio was less than 1e-10 or the minimum less than 1e-12).
- Extending Ox:
  - value argument of `OxValSetDouble` was int not double
  - Providing missing documentation for exported functions from DLL: OxSetOxArgs,OxGetOxArgs, OxGetMainArgs, OxSetMainArgs, OxSetPrintlevel, OxGetPrintlevel, OxPuts.
  - OxValGetStringCopy was not exported

## OxGauss

- `vech` is wrongly using the Ox version.
- `qqre`,`qre`,`qtyre`,`qyre` should return P instead of P'
- `export` is missing
- `__olsres` should be `_olsres`.
- `scalmiss` should return 1 for empty matrix and 0 for empty string
- `errorlog "Error message"` now prints the message
- `ftos` omits a single character following the format
- power followed by unary operator gave error (e.g. x ^ -2)
- _eigerr was not defined
- `files` was missing second argument (which is ignored)
- a statement like `let x0 = a+a b+b;` did not compile correctly
- ``declare external x'` should be a syntax error but seems to be treated as declare x.
- created `lag(x)` to be the same as lag1(x)
- now allowing function forward reference when address is taken in argument
- removed all conditional sections (for g2ox) from g2ox.ox and g2ox.h. The default behaviour is now same as when OX_GAUSS was defined before.

Ox version 3.40. © JA Doornik

This file last changed
.