naah, thanks, that's ok.
As soon as I can acquire my own turing machine, I'll insist on 1 number type.
Until then I can live with different number types and some rules for
my finite machines.


On 5/21/19, Michael Jones <michael.jo...@gmail.com> wrote:
> Oh, Sorry. Have been away from email today. (Focused 100% in VS-code on a
> cool feature for Go)
>
> My statement was meant to convey an insight into a subtle aspect of Go's
> constants and high-precision expression evaluation--that the "type" of
> untyped constants/values, in the conversion rules sense, is derived in the
> instant of the conversion and is not an inherent trait of the value as is
> quite generally the case in other languages and situations. Also I think,
> the spec document is a little deceptive here, or at least, it needs to be
> read creatively to understand what all the possibilities are.
>
> In this case, the original question by Djadala was about a const "6.6" not
> being able to be coerced to integer form in either of two ways of
> trying ("x = int(y)" and "x int = y"). Both you and Jan explained why this
> is so and where/how it is defined in the specification. That was
> authoritative.
>
> However, the original question was worded in such a way that I could not
> discern if he was asking "please share the official reason why this seems
> impossible" or if instead he/she meant, "can I do this? I've tried two
> ways, and it seems impossible." I'm very supportive of the "how can I make
> it work?" sentiment and I doubted that the OP would figure it out since the
> two responses seemed so absolute, so I weighed in.
>
> Here's the subtle point. *That 6.6 constant "y" is NOT a floating-point
> value.*  it's value just happens to "be as if floating" at the moment.
> However, "y*10" evaluates to 66, and that is a "just plain 66" not "10
> times the floating point 6.6, therefore an inherent floating point value of
> 66.0" The upshot is that Djadala cannot get "y" into an int, but can easily
> get "10*y" into one, and having done so, can make that integer 66 into the
> integer 6 via truncating integer division as I showed in the linked Go
> Playground example: https://play.golang.org/p/7gcb9Yv7c9e
>
> Since the "6.6" has one decimal place making y *be as if floating point,*
> multiplication by an integer multiple of 10 is enough to clear the decimals
> and let it *be as if integer* in arbitrary expressions. If it was "6.67" (2
> places) or "6.678" (three places), then the least power of ten to clear the
> "as if floating" problem Djadala faced would be "10**k, k >= number of
> decimals" as was indicated in my comment in the linked Playground example.
>
> Sadly, this is not a general-purpose, remedy because the magic expression
> evaluation logic insists that values fit into the target size; were it not
> this way, we might imagine multiplying by 10**k, k>=19, capturing the
> integerness of the expression in that instant, and then dividing by the
> same factor. Alas, we'll be stopped right there because the expression,
> while *as if an integer,* is simultaneously, *as if too big to fit into
> one. *Since 64-bit ints are big and the OP was wrestling with only one
> decimal place in a small sized number, it worked with fifteen or more
> digits of precision to spare. However, if "y" were (1e16 + 0.6) then there
> would not be much wiggle room to clear the decimals this way.
>
> If these kinds of topics are interesting to you, there are discussions
> about related matters and possible changes for Go 2 in various proposal
> threads.
>
> On Mon, May 20, 2019 at 11:50 PM <fge...@gmail.com> wrote:
>
>> Could you please clarify which statement your example is meant to
>> confirm or refute?
>>
>>
>>
>> On 5/20/19, Michael Jones <michael.jo...@gmail.com> wrote:
>> > ahem...
>> > https://play.golang.org/p/7gcb9Yv7c9e
>> >
>> > On Mon, May 20, 2019 at 2:45 AM <fge...@gmail.com> wrote:
>> >
>> >> https://golang.org/ref/spec#Constants
>> >>
>> >> "A constant may be given a type explicitly by a constant declaration
>> >> or conversion, or implicitly when used in a variable declaration or an
>> >> assignment or as an operand in an expression. It is an error if the
>> >> constant value cannot be represented as a value of the respective
>> >> type."
>> >>
>> >>
>> >>
>> >> On 5/20/19, djad...@gmail.com <djad...@gmail.com> wrote:
>> >> > Hi,
>> >> > does this should work ?
>> >> >
>> >> > package main
>> >> >
>> >> > import (
>> >> >     "fmt"
>> >> > )
>> >> >
>> >> > func main() {
>> >> >     const (
>> >> >         c = 2
>> >> >         z = 3.3
>> >> >         y = c * z
>> >> >         x = int(y) // or x int = y
>> >> >     )
>> >> >
>> >> >     fmt.Println(x)
>> >> > }
>> >> >
>> >> >
>> >> > it does not compile with error:
>> >> > constant 6.6 truncated to integer
>> >> >
>> >> > https://play.golang.org/p/f-Q6XSvvcrM
>> >> >
>> >> > --
>> >> > You received this message because you are subscribed to the Google
>> >> > Groups
>> >> > "golang-nuts" group.
>> >> > To unsubscribe from this group and stop receiving emails from it,
>> >> > send
>> >> > an
>> >> > email to golang-nuts+unsubscr...@googlegroups.com.
>> >> > To view this discussion on the web visit
>> >> >
>> >>
>> https://groups.google.com/d/msgid/golang-nuts/736e8b03-d38f-4ec4-adc8-fcb77e0cda7b%40googlegroups.com
>> >> .
>> >> > For more options, visit https://groups.google.com/d/optout.
>> >> >
>> >>
>> >> --
>> >> You received this message because you are subscribed to the Google
>> Groups
>> >> "golang-nuts" group.
>> >> To unsubscribe from this group and stop receiving emails from it, send
>> an
>> >> email to golang-nuts+unsubscr...@googlegroups.com.
>> >> To view this discussion on the web visit
>> >>
>> https://groups.google.com/d/msgid/golang-nuts/CA%2Bctqrp24YWs4cQVE2NxTEqzn0VxgRLTH3aAbXhjPKV21pDeqA%40mail.gmail.com
>> >> .
>> >> For more options, visit https://groups.google.com/d/optout.
>> >>
>> >
>> >
>> > --
>> >
>> > *Michael T. jonesmichael.jo...@gmail.com <michael.jo...@gmail.com>*
>> >
>>
>
>
> --
>
> *Michael T. jonesmichael.jo...@gmail.com <michael.jo...@gmail.com>*
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CA%2BctqrrVd1okkhD5bQj0os%2BNed3D9NseOU-6icA%3D6OnoeqXaeg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to