Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

# Re: why do ceil/floor give the decimal dot?

```On 2015-05-14 10:54:26 -0700, Bart Schaefer wrote:
> No, I mean that looking at this:
>
> torch% float X=27
> torch% print \$X
> 2.700000000e+01
> torch% print \$(( X ))
> 27.
> torch% printf "%f\n" \$X
> 27.000000
> torch% printf "%g\n" \$X
> 27
>
> One might wonder why there are four different representations of the
> same number, and we could therefore discuss whether some of them should
> be unified.  This is not the same discussion as whether they should be
> converted to integers.

Concerning the accuracy:

ypig% float x=\$((1./3))
ypig% print \$x
3.333333333e-01
ypig% print \$((x))
0.33333333333333331
ypig% printf "%f\n" \$x
0.333333
ypig% printf "%g\n" \$x
0.333333

The last two are specified by C, and I suppose that \$((x)) gives full
accuracy, i.e. if the decimal number is re-read as a floating-point
value, the original value must be recovered exactly.

Concerning the first one, I wonder why there are "typeset -E" (default
for "float" as used above) and "typeset -F". The way a value is output
shouldn't come from its declaration. IMHO, there should be a single
floating-point datatype, not one for each output format.

BTW, there is a bug in zsh 5.0.7:

ypig% typeset -F 3 x=\$((17))
ypig% print \$x
17.000
ypig% typeset -F 2 x=\$((17))
ypig% print \$x
17.00
ypig% typeset -F 1 x=\$((17))
typeset: invalid base (must be 2 to 36 inclusive): 1

It is not a base here.

--
Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)

```

Messages sorted by: Reverse Date, Date, Thread, Author