With this Julia code:

x = -2.34e-12;
for i in 1:5
  x=-x*5000.
  println("$i $x")
end

I get this output:

1 1.17e-8
2 -5.8500000000000006e-5
3 0.29250000000000004
4 -1462.5000000000002
5 7.312500000000001e6

I don't think this is too bad. True, the output is a bit longer, but I
actually prefer it, because you can copy/paste the numbers back into Julia
and be sure you're getting the exact number that was used in the code.

-- mb

On Thu, Sep 24, 2015 at 2:39 PM, lawrence dworsky <m...@lawrencedworsky.com>
wrote:

> Hi Tom
>
> Sorry to take so long to get back to you, I had to go away for a couple of
> days. Thanks for the installation information, @fmt is working fine now.
> It's still not as useful as the Fortran print * formatting however because
> it ​requires the user to know what's coming. For example, the Fortran code
>
> x = -2.34e-12
> do i = 1, 5
>   x = -x*5000.
>   print *, i, x
> end do
>
> produces
>
> 1     1.170000E-08
> 2    -5.850000E-05
> 3     0.292500
> 4     -1462.5
> 5     7.312501e+06
>
> As you can see, print * figured out when exponential notation is necessary
> and automatically used it.
>
> I'm retired now, but when I was working I spent a lot of time writing
> numerical analysis programs for various engineering issues (elastic
> material deformation, electron trajectories, etc.) While a  program was
> being developed I didn't care about the aesthetics of my printout, I just
> needed useful information - and early on, numerical or algebraic or
> programming errors could easily produce results off by 10 order of
> magnitude!
>
> I think a capability such as this in Julia would be heavily used. I wish I
> had the expertise to write it.
>
> Larry
>
>
>
> On Tue, Sep 22, 2015 at 4:59 PM, Tom Breloff <t...@breloff.com> wrote:
>
>> Sorry I wasn't expecting you to run it... just comment.  You'll have to
>> do:
>>
>> Pkg.rm("Formatting")
>> Pkg.clone("https://github.com/tbreloff/Formatting.jl.git";)
>> Pkg.checkout("Formatting", "tom-fmt")
>>
>> Let me know if that works.
>>
>> On Tue, Sep 22, 2015 at 5:52 PM, lawrence dworsky <
>> m...@lawrencedworsky.com> wrote:
>>
>>> I'm afraid my beginner status with Julia is showing:
>>>
>>> I ran Pkg.add("Formatting"), and then   using Formatting   came back
>>> with a whole bunch of warnings, most about  Union(args...) being
>>> depricated, use Union(args....) instead.
>>>
>>> When all is said and done,   fmt_default!  gives me a  UndefVarError.
>>>
>>> Help!
>>>
>>>
>>>
>>> On Tue, Sep 22, 2015 at 2:45 PM, Tom Breloff <t...@breloff.com> wrote:
>>>
>>>> Thanks Larry, that's helpful.  Just for discussions sake, here's a
>>>> quick macro that calls my proposed `fmt` method under the hood, and does
>>>> something similar to what you showed.  What do you think about this style
>>>> (and what would you do differently)?
>>>>
>>>> using Formatting
>>>>
>>>> macro fmt(args...)
>>>>  expr = Expr(:block)
>>>>  expr.args = [:(print(fmt($(esc(arg))), "\t\t")) for arg in args]
>>>>  push!(expr.args, :(println()))
>>>>  expr
>>>> end
>>>>
>>>>
>>>> And then an example usage:
>>>>
>>>> In:
>>>>
>>>> x = 1010101
>>>> y = 555555.555555555
>>>> fmt_default!(width=15)
>>>>
>>>> @fmt x y
>>>>
>>>> fmt_default!(Int, :commas)
>>>> fmt_default!(Float64, prec=2)
>>>>
>>>> @fmt x y
>>>>
>>>>
>>>> Out:
>>>>
>>>>         1010101  555555.555556
>>>>       1,010,101      555555.56
>>>>
>>>>
>>>>
>>>> On Tuesday, September 22, 2015 at 3:08:35 PM UTC-4, lawrence dworsky
>>>> wrote:
>>>>>
>>>>> Hi Tom
>>>>>
>>>>> What I like about it is that you can just use print *, dumbly and it
>>>>> always provides useful, albeit not beautiful, results. When I'm writing a
>>>>> program, I use print statements very liberally to observe what's going on 
>>>>> -
>>>>> I find this more convenient than an in-line debugger.
>>>>>
>>>>> As the last line in my program below shows, it's easy to switch to
>>>>> formatted output when you want to. The formatting capability is pretty
>>>>> thorough, I'm just showing a simple example.
>>>>>
>>>>> This Fortran program doesn't do anything, it just illustrates what the
>>>>> print statement produces:
>>>>>
>>>>>
>>>>> real x, y
>>>>> integer i, j
>>>>> complex z
>>>>> character*6  name
>>>>>
>>>>> x = 2.6
>>>>> y = -4.
>>>>> i = 36
>>>>> j = -40
>>>>> z = cmplx(17., 19.)
>>>>> name = 'Larry'
>>>>>
>>>>> print *, x, y, i, j, z
>>>>> print *, 'x = ', x, ' and j = ', j
>>>>> print *, 'Hello, ', name, j
>>>>> print '(2f8.3, i5)', x, y, j
>>>>>
>>>>> stop
>>>>> end
>>>>>
>>>>>
>>>>> The output is:
>>>>>
>>>>>         2.60000             -4.00000                   36
>>>>> -40  (17.0000, 19.0000)
>>>>> x =         2.60000       and j =                -40
>>>>> Hello, Larry                 -40
>>>>>   2.600   -4.000  -40
>>>>>
>>>>>
>>>>> Is this what you are looking for?
>>>>>
>>>>> Larry
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Sep 22, 2015 at 11:57 AM, Tom Breloff <t...@breloff.com>
>>>>> wrote:
>>>>>
>>>>>> Larry: can you provide details on exactly what you like about
>>>>>> Fortran's print statement?  Did it provide good defaults?  Was it easy to
>>>>>> customize?
>>>>>>
>>>>>> On Tue, Sep 22, 2015 at 12:55 PM, LarryD <larryd...@gmail.com> wrote:
>>>>>>
>>>>>>> Something I miss from Fortran is the very convenient default "print
>>>>>>> *, ..... "  It handled almost 100% of my needs while working on a 
>>>>>>> program
>>>>>>> and was easily replaced by real formatting when the time came. Is there 
>>>>>>> any
>>>>>>> chance that Julia could get something like this?
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>>
>>>>>>> On Monday, September 21, 2015 at 3:46:31 AM UTC-5, Ferran Mazzanti
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Dear all,
>>>>>>>>
>>>>>>>> I could use some help here, because I can't believe I'm not able to
>>>>>>>> easily print formatted numbers under Julia in a easy way. What I try 
>>>>>>>> to do
>>>>>>>> is to write a function that, given a vector, prints all its components 
>>>>>>>> with
>>>>>>>> a user-defined format. I was trying something of the form
>>>>>>>>
>>>>>>>> function Print_Vec(aux_VEC,form_VEC)
>>>>>>>>     form_VEC :: ASCIIString
>>>>>>>>     str_VEC  = "%16.8f"
>>>>>>>>     for elem_VEC in aux_VEC
>>>>>>>>         str_VEC += @sprintf(form_VEC,elem_VEC)
>>>>>>>>     end
>>>>>>>>     return str_VEC
>>>>>>>> end
>>>>>>>>
>>>>>>>> However, that doesn't work because it looks like the first argument
>>>>>>>> in @sprintf must be a explicit string, and not a variable.
>>>>>>>> Is there anything I can do with that?
>>>>>>>>
>>>>>>>> Thanks a lot for your help.
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>
>>
>

Reply via email to