Tony Mechelynck wrote:
> On 09/04/08 17:30, Bram Moolenaar wrote:
>> Tony Mechelynck wrote:
> [...]
>>> Oh, oh.. it had started working (and&1.0e256 multiplied by itself gives
>>> inf, which is correct), but ":echo&1.0e308" crashes gvim (on Linux
>>> i686) with SIGSEGV.
>> Easy to reproduce.  Turns out that this line causes it:
>>
>>      sprintf(tmp, format, f);
>>
>> Here "format" is "%f"  and "f" is your value 1e+308.  The result is an
>> awful long string of numbers.  I suppose it's about 308 digits.  How big
>> does "tmp" need to be to hold any result here?  I don't think %f has a
>> way of specifying a maximal field width.
> [...]
> 
> I suggest a third floating-point format (%g maybe, or something else if 
> that is already taken) which would mean "either %f or %e depending on 
> the size of the exponent" similar, IIRC, to the number output formats 
> available in FORTRAN and/or BASIC. That format would be implicit when 
> ":echo"ing a floating-point number. (Yes, I know, Vim is neither FORTRAN 
> nor BASIC, but I feel this kind of thing would be better than crashing 
> or even than giving an error.)

+1.

Ben.

> IIRC, in FORTRAN, the G output format would give (for different values 
> output under a single format) results like:
> 
> -1.234567E-123 (for a small number)
>   2.25          (with spaces to the same width)
>   342.5682      (with spaces for a large number but not too large)
>   6.020000E+023 (for an even bigger number)
> NAN            (a special case)
> -INF           (another special case)
> 
> (this from what [I think that] I remember from the time I used FORTRAN 
> on computers whose printers had no lowercase letters).





--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui