To file a bug (and have it treated seriously) you would need to demonstrate that it is causing problems in a program that actually does something useful, not just a pathological code sample. My expectation would be that once you start doing some real processing, the difference between time.Now() invocations becomes non-zero, that is this "issue" doesn't reproduce with "real" practical programs.
On Fri, May 4, 2018 at 10:26 PM, Andrei Avram <andrei.avram....@gmail.com> wrote: > But I don't think it is because Windows is so much faster than Linux >> > > Yeah... :) I was exploring all cases. > > > and/or the way the time package implemented is different between Windows >> and Linux > > > Could this be considered a possible Go bug and would it worth opening an > issue on Github? > > > On Friday, May 4, 2018 at 10:57:46 PM UTC+3, speter wrote: >> >> So on Linux it's working as expected. In the playground time is >> "virtual"; the start time is fixed and it doesn't progress unless you >> explicitly Sleep -- because you don't Sleep in your program, time.Now() >> returns the same time on both invocation. >> >> So the only slightly surprising part is that on Windows, time as measured >> by time.Now() doesn't progress between the two statements. But I don't >> think it is because Windows is so much faster than Linux. :) I'd guess this >> is because the way Windows manages time is different from how Linux manages >> it, and/or the way the time package implemented is different between >> Windows and Linux. The result of the cross-platform differences seems to be >> less precision on Windows -- at least in this specific scenario. >> >> Peter >> >> >> On Fri, May 4, 2018 at 9:33 PM, Andrei Avram <andrei.a...@gmail.com> >> wrote: >> >>> Peter and Ian, you are both wright regarding the printing. Still, on >>> Linux I have different values than on Go Playground. >>> >>> Regarding the speed, Peter, do you think that on Windows the two calls >>> just run faster every time? >>> >>> On Friday, May 4, 2018 at 9:07:15 PM UTC+3, speter wrote: >>>> >>>> b is slightly less than 3 because there is a bit of time between the >>>> two calls to time.Now(). >>>> >>>> If you substitute this: >>>> fmt.Printf("input: %20.18f\n", b) >>>> >>>> you get something like >>>> input: 2.999999965553350911 >>>> >>>> HTH >>>> Peter >>>> >>>> On Fri, May 4, 2018 at 7:26 PM, Andrei Avram <andrei.a...@gmail.com> >>>> wrote: >>>> >>>>> Hello everyone, >>>>> >>>>> Today I ran into a situation that is strange to me. I ran the >>>>> following code on two Linux machines (go run floor.go), on two Windows >>>>> ones, and on Go Playground. >>>>> >>>>> package main >>>>> >>>>> import ( >>>>> "time" >>>>> "math" >>>>> ) >>>>> >>>>> func main() { >>>>> datetime := time.Now().Add(time.Hour * 24 * 7 * 4 * 12 * 3) >>>>> seconds := -1 * int(time.Now().Sub(datetime).Seconds()) >>>>> a := 29030400 >>>>> b := float64(seconds) / float64(a) >>>>> >>>>> println("input:", b) >>>>> println("floor:", math.Floor(b)) >>>>> } >>>>> >>>>> On Linux the output is: >>>>> >>>>> input: +3.000000e+000 >>>>> floor: *+2.000000e+000* >>>>> >>>>> On Windows and Playground: >>>>> >>>>> input: +3.000000e+000 >>>>> floor: *+3.000000e+000* >>>>> >>>>> As you can see, on Linux the floor value of float value 3 is rounded >>>>> down to 2, while on Windows/Playground it's 3. >>>>> >>>>> The code was ran with Go 1.10 and 1.10.2. >>>>> >>>>> The system details of one of the Linux machines, as reported by "go >>>>> bug": >>>>> >>>>> go version go1.10.2 linux/amd64 >>>>> GOARCH="amd64" >>>>> GOBIN="" >>>>> GOCACHE="/home/msd/.cache/go-build" >>>>> GOEXE="" >>>>> GOHOSTARCH="amd64" >>>>> GOHOSTOS="linux" >>>>> GOOS="linux" >>>>> GOPATH="/home/msd/go/" >>>>> GORACE="" >>>>> GOROOT="/usr/local/go" >>>>> GOTMPDIR="" >>>>> GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" >>>>> GCCGO="gccgo" >>>>> CC="gcc" >>>>> CXX="g++" >>>>> CGO_ENABLED="1" >>>>> CGO_CFLAGS="-g -O2" >>>>> CGO_CPPFLAGS="" >>>>> CGO_CXXFLAGS="-g -O2" >>>>> CGO_FFLAGS="-g -O2" >>>>> CGO_LDFLAGS="-g -O2" >>>>> PKG_CONFIG="pkg-config" >>>>> GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 >>>>> -fdebug-prefix-map=/tmp/go-build304261270=/tmp/go-build >>>>> -gno-record-gcc-switches" >>>>> GOROOT/bin/go version: go version go1.10.2 linux/amd64 >>>>> GOROOT/bin/go tool compile -V: compile version go1.10.2 >>>>> uname -sr: Linux 4.13.0-37-generic >>>>> Distributor ID: Ubuntu >>>>> Description: Ubuntu 16.04.4 LTS >>>>> Release: 16.04 >>>>> Codename: xenial >>>>> /lib/x86_64-linux-gnu/libc.so.6: GNU C Library (Ubuntu GLIBC >>>>> 2.23-0ubuntu10) stable release version 2.23, by Roland McGrath et al. >>>>> gdb --version: GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 >>>>> >>>>> >>>>> Is there something I miss or could this be an issue? >>>>> >>>>> Thanks, >>>>> Andrei >>>>> >>>>> -- >>>>> 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...@googlegroups.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...@googlegroups.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. > 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. For more options, visit https://groups.google.com/d/optout.