Bill McCarthy wrote:
> On Sun 22-Jun-08 2:49pm -0600, Tony Mechelynck wrote: > > > On 21/06/08 13:56, Bram Moolenaar wrote: > > >> Ben Schmidt wrote: > > >>> - Furthermore, on investigation, it seems there is an interesting > >>> definition of 'significant figures' in the library docs, and %.15g = > is > >>> the correct value, not %.16g. It might be worth noting at the print= > f() > >>> docs, or the Float docs where precision is mentioned, or both, that > >>> maximum precision output can be obtained with %.15g. > >> > >> I don't see this, for me %.16g does produce a longer result. > > [...] > > > > A higher number prints additional digits, but starting at some point, > > the additional digits are bogus. Example: > > > > :echo printf('%.25g', 1.0/3.0) > > 0.3333333333333333148296163 > > > > Anything after the row of threes is bogus. > > > > :echo printf('%.25g', 10.0/9.0) > > 1.1111111111111111604543567 > > > > Here anything after the ones is bogus. And so on. These examples seem to > > imply that, in these cases at least, %.16g is the maximum valid precision. > > Yes, the only way to have as many as, say, 15 significant > digits but as few as possible more than 1 is to use a > function: > > Bram, I would like to see something like this representation > be the default for :echo float_expression. > > ========================================== > " Do a printf with %g printing as many as 15 significant > " digits but as few as possible more than 1. > > function! PG(x) > let x = a:x + 0.0 > let y = x < 0 ? -x : x " No fabs() in official release > let n = x == 0.0 ? 0 : float2nr(floor(log10(y)))+1 > > if n < -1 || n > 15 > return substitute(substitute(printf("%0.14e",x), > \'\.\=0*e','e',''),'\([eE][+-]\)0*\([0-9]\+\)','\1\2','') > else > return substitute(substitute(printf("%0.*f", 15-n, x), > \'\([^.]*\..\{-}\)0\+$','\1',''),'\.$','','') > endif > endfunction > ========================================== > > Examples: > > :echo PG(0.012) > 0.012 > :echo PG(-0.00123) > -1.23e-3 > :echo PG(7/4.0) > 1.75 > :echo PG(123456789012345.0) > 123456789012345 > :echo PG(1.0e20) > 1e+20 I get the feeling we are splitting hairs here. Anyway, current Vim does like the above. Except: :echo PG(-0.00123) -1.23e-3 I would prefer to see -0.00123, as Vim does now. :echo PG(123456789012345.0) 123456789012345 I can't read what the order of that number is, 1.234568e14 is just as good. Matter of taste, I suppose. -- hundred-and-one symptoms of being an internet addict: 84. Books in your bookcase bear the names Bongo, WinSock and Inside OLE /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ download, build and distribute -- http://www.A-A-P.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org /// --~--~---------~--~----~------------~-------~--~----~ You received this message from the "vim_dev" maillist. For more information, visit http://www.vim.org/maillist.php -~----------~----~----~----~------~----~------~--~---