comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Most significant digit and formatting floating point output
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Re: Most significant digit and formatting floating point output [message #81084] Wed, 08 August 2012 13:20
Helder Marchetto is currently offline  Helder Marchetto
Messages: 520
Registered: November 2011
Senior Member
On Tuesday, August 7, 2012 5:37:31 PM UTC+2, Craig Markwardt wrote:
> On Tuesday, August 7, 2012 9:33:13 AM UTC-4, Helder wrote:
>
>> Dear all,
>
>>
>
>> well, I'm tangled up with something quite stupid, but I don't want to reinvent the wheel (for the 10th time today...).
>
>>
>
>> Here are two versions of the same question:
>
>>
>
>> 1) Short version: given a number such as 0.003456789 how do I get the most significant digit position? I need this number to produce formatted output that would convert the number to simply 0.003. In general I can figure this out with some IFs and stuff like that, but I'm hoping there is a more "elegant" way for this.
>
>>
>
>>
>
>>
>
>> 2) Long version: I'm analyzing some images and I get results with errors. These numbers are floating point and I would like to format the output so that it looks something like this: 'My results are (0.123 +/- 0.003) units' and the source data is:
>
>>
>
>> Result = 0.123456789
>
>>
>
>> Error = 0.003456789
>
>>
>
>> The point is that I need to find the first non-zero element in Error. Then I would use this number in the FORMAT parameter like this: MyFormat = '(f0'+STRTRIM(FirstNonZeroElement+2,2)+'.'+STRTRIM(FirstNonZ eroElement,2)+')'
>
>>
>
>> and use "MyFormat" as formatting for the string conversion of both.
>
>>
>
>> (in the above example FirstNonZeroElement should be 3 and MyFormat would be '(f05.3)'.
>
>
>
> ALOG10(ABS(X)) should give you this information. But to be general, you need to handle ABS(X) LT 1 and ABS(X) GT 1 separately. And also, the X LT 0 case demands one extra digit for the '-' symbol.
>
>
>
> Some extra rounding logic may be needed.
>
>
>
> Craig

Hi Craig,
thanks, that is what I was looking for.
Cheers,
Helder
Re: Most significant digit and formatting floating point output [message #81092 is a reply to message #81084] Tue, 07 August 2012 08:37 Go to previous message
Craig Markwardt is currently offline  Craig Markwardt
Messages: 1869
Registered: November 1996
Senior Member
On Tuesday, August 7, 2012 9:33:13 AM UTC-4, Helder wrote:
> Dear all,
>
> well, I'm tangled up with something quite stupid, but I don't want to reinvent the wheel (for the 10th time today...).
>
> Here are two versions of the same question:
>
> 1) Short version: given a number such as 0.003456789 how do I get the most significant digit position? I need this number to produce formatted output that would convert the number to simply 0.003. In general I can figure this out with some IFs and stuff like that, but I'm hoping there is a more "elegant" way for this.
>
>
>
> 2) Long version: I'm analyzing some images and I get results with errors. These numbers are floating point and I would like to format the output so that it looks something like this: 'My results are (0.123 +/- 0.003) units' and the source data is:
>
> Result = 0.123456789
>
> Error = 0.003456789
>
> The point is that I need to find the first non-zero element in Error. Then I would use this number in the FORMAT parameter like this: MyFormat = '(f0'+STRTRIM(FirstNonZeroElement+2,2)+'.'+STRTRIM(FirstNonZ eroElement,2)+')'
>
> and use "MyFormat" as formatting for the string conversion of both.
>
> (in the above example FirstNonZeroElement should be 3 and MyFormat would be '(f05.3)'.

ALOG10(ABS(X)) should give you this information. But to be general, you need to handle ABS(X) LT 1 and ABS(X) GT 1 separately. And also, the X LT 0 case demands one extra digit for the '-' symbol.

Some extra rounding logic may be needed.

Craig
Re: Most significant digit and formatting floating point output [message #81093 is a reply to message #81092] Tue, 07 August 2012 07:09 Go to previous message
Helder Marchetto is currently offline  Helder Marchetto
Messages: 520
Registered: November 2011
Senior Member
On Tuesday, August 7, 2012 3:44:05 PM UTC+2, David Fanning wrote:
> Helder writes:
>
>
>
>> well, I'm tangled up with something quite stupid, but I don't want to reinvent the wheel (for the 10th time today...).
>
>> Here are two versions of the same question:
>
>> 1) Short version: given a number such as 0.003456789 how do I get the most significant digit position? I need this number to produce formatted output that would convert the number to simply 0.003. In general I can figure this out with some IFs and stuff like that, but I'm hoping there is a more "elegant" way for this.
>
>>
>
>> 2) Long version: I'm analyzing some images and I get results with errors. These numbers are floating point and I would like to format the output so that it looks something like this: 'My results are (0.123 +/- 0.003) units' and the source data is:
>
>> Result = 0.123456789
>
>> Error = 0.003456789
>
>> The point is that I need to find the first non-zero element in Error. Then I would use this number in the FORMAT parameter like this: MyFormat = '(f0'+STRTRIM(FirstNonZeroElement+2,2)+'.'+STRTRIM(FirstNonZ eroElement,2)+')'
>
>> and use "MyFormat" as formatting for the string conversion of both.
>
>> (in the above example FirstNonZeroElement should be 3 and MyFormat would be '(f05.3)'.
>
>
>
> You might be interested in the Number_Formatter program
>
> in the Coyote Library:
>
>
>
> http://www.idlcoyote.com/programs/number_formatter.pro
>
>
>
> Cheers,
>
>
>
> David
>
>
>
>
>
>
>
> --
>
> David Fanning, Ph.D.
>
> Fanning Software Consulting, Inc.
>
> Coyote's Guide to IDL Programming: http://www.idlcoyote.com/
>
> Sepore ma de ni thui. ("Perhaps thou speakest truth.")

Thanks David,
If I understand number_formatter correctly, it accepts a number of decimals as an input, but it does not determine which one is the first significant digit.

I'm starting to think that I'll have to code this as in your program and look for the first digit that is not a zero or a dot.

Thanks,
Helder
Re: Most significant digit and formatting floating point output [message #81094 is a reply to message #81093] Tue, 07 August 2012 06:44 Go to previous message
David Fanning is currently offline  David Fanning
Messages: 11724
Registered: August 2001
Senior Member
Helder writes:

> well, I'm tangled up with something quite stupid, but I don't want to reinvent the wheel (for the 10th time today...).
> Here are two versions of the same question:
> 1) Short version: given a number such as 0.003456789 how do I get the most significant digit position? I need this number to produce formatted output that would convert the number to simply 0.003. In general I can figure this out with some IFs and stuff like that, but I'm hoping there is a more "elegant" way for this.
>
> 2) Long version: I'm analyzing some images and I get results with errors. These numbers are floating point and I would like to format the output so that it looks something like this: 'My results are (0.123 +/- 0.003) units' and the source data is:
> Result = 0.123456789
> Error = 0.003456789
> The point is that I need to find the first non-zero element in Error. Then I would use this number in the FORMAT parameter like this: MyFormat = '(f0'+STRTRIM(FirstNonZeroElement+2,2)+'.'+STRTRIM(FirstNonZ eroElement,2)+')'
> and use "MyFormat" as formatting for the string conversion of both.
> (in the above example FirstNonZeroElement should be 3 and MyFormat would be '(f05.3)'.

You might be interested in the Number_Formatter program
in the Coyote Library:

http://www.idlcoyote.com/programs/number_formatter.pro

Cheers,

David



--
David Fanning, Ph.D.
Fanning Software Consulting, Inc.
Coyote's Guide to IDL Programming: http://www.idlcoyote.com/
Sepore ma de ni thui. ("Perhaps thou speakest truth.")
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Substituting multiple strings into a program
Next Topic: append files

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 18:57:08 PDT 2025

Total time taken to generate the page: 0.00629 seconds