Print

Print


Hi Bernhard,

you can do this, see the example below. There is one drawback with using the 
format statement though: you cannot reset the precise default, because this uses 
%g for doubles, not %#13.5g".

Jurgen

#include <oxstd.h>

main()
{
	// enter code
	decl x = rann(10,10);
	println("x[3:][3]=", x[3:][3]);

	// set the global format for matrix and double printing
	format("%4.2f");
	decl f = fopen("test.mat", "w");
	fprint(f, "%M", x);
	fclose(f);
	// reset the global format for matrix and double printing
	format("%#13.5g");

	decl y = loadmat("test.mat");
	println("y[3:][3]=", y[3:][3]);
}

oxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxox
oxoxoxox 4th OxMetrics user conference 2006
oxoxoxox Cass Business School, London
oxoxoxox 14-15 September 2006
oxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxox
Dr Jurgen A Doornik
Nuffield College, Oxford OX1 1NF, UK
tel. UK: +44-1865-278610    fax  +44-1865-278621
http://www.doornik.com
http://www.oxmetrics.net
oxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxox


Bernhard Klingenberg wrote:
> Hi all,
> 
> it would be great if the savemat() function would also allow to save 
> numbers in a format such as  "%4.2f" and not in the long scientific 
> notation. This can cut down significantly on the size of the saved file 
> (i.e., if it holds simulation output) and makes it easier for later 
> processing. Is it possible to program for such an option in savemat in a 
> later version?
> 
> Cheers,
> 
> Bernhard
> 
> 
> Bernhard Klingenberg
> Assist. Prof. of Statistics
> Williams College
> 
> Richard Lewney wrote:
>>
>> Dear Dimitris
>>
>> The number that you are seeking to handle in Ox, 3070109050, is too 
>> large to be held as an integer.  The largest number that Ox will hold 
>> as an integer is 2147483647.  Any larger number has to be held as a 
>> double.  However, you can display a large integer in a format that 
>> looks like an integer, if that is what you want, instead of in the 
>> default (for a number of this size) scientific notation, by using a 
>> formatting command.
>>
>> The following short program shows
>> (a) what happens as you approach, or exceed, the largest possible size 
>> of integer
>> (b) how to display a large double so that it looks like an integer 
>> (which I think is what you want to do)
>>
>> Regards
>>
>> Richard Lewney
>> Cambridge Econometrics
>>
>>
>> main()
>> {
>>         decl iX;
>>
>> //        This number is held as an integer
>>         iX=2147483647;
>>
>>         if (isint(iX))
>>                 println(iX," is an integer");
>>         else if (isdouble(iX))
>>                 println(iX," is a double");
>>
>> //        This number is held as a double
>>         iX=2147483648;
>>
>>         if (isint(iX))
>>                 println(iX," is an integer");
>>         else if (isdouble(iX))
>>                 println(iX," is a double");
>>
>> //        This shows an unexpected thing that happens when you add 1 
>> to the largest possible integer (it goes negative)
>>         iX=2147483647;
>>         iX=iX+1;
>>
>>         if (isint(iX))
>>                 println(iX," is an integer");
>>         else if (isdouble(iX))
>>                 println(iX," is a double");
>>
>> //        This shows different ways of displaying a large double
>>         iX=3070109050;
>>
>>         println("Default format for printing iX: ", iX);
>>        
>>         println("Impose format for printing iX: ", "%12.0f",iX);
>>
>>
>>
>>
>>
>> *dimitris bagkavos <[log in to unmask]>*
>> Sent by: The ox-users list is aimed at all Ox users 
>> <[log in to unmask]>
>>
>> 20/10/2006 16:41
>> Please respond to
>> dimitris bagkavos <[log in to unmask]>
>>
>>
>> 	
>> To
>> 	[log in to unmask]
>> cc
>> 	
>> Subject
>> 	large numbers as integers
>>
>>
>>
>> 	
>>
>>
>>
>>
>>
>> Dear Ox users,
>>
>> I would like, when loading say one really large number such as: 3070109050
>> through MS Excel to be able to assign that to a variable as integer
>> and not as scientific notation (currently Ox assigns it as
>> 3.07011e+009).
>> I've tried to cast it to a string with: sprint("%d", int(CarryOvers))
>> (i'd be equally happy with that if it could work) but I had zero luck
>> as it returns to me: -1224858246.
>>
>> Does anybody knows if there is any way around this ?
>>
>> Thanks in advance,
>> Dimitris
>>
>> =======================================================================
>> Scanned for virus infection by Messagelabs
>> =======================================================================
>>
>> =======================================================================
>> This email has been scanned for Virus infection by MessageLabs
>> For more information please contact [log in to unmask]
>> =======================================================================