You could be seeing a side effect on fact that windows only ticks every 15ms.
On Fri, 4 May 2018 at 21:56, Andrei Avram <[email protected]> wrote: > This code is extracted from something real. Someone on the team noticed > the unit tests (which I wrote on a Linux machine) were failing on their > Windows machine. > I'll continue studying this and come back if I find something new. > > Thank you both for your time, I appreciate it! > > > On Friday, May 4, 2018 at 11:42:00 PM UTC+3, speter wrote: > >> 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 <[email protected]> >> 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 <[email protected]> >>>> 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 <[email protected]> >>>>>> 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 [email protected]. >>>>>>> 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 [email protected]. >>>>> 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 [email protected]. >>> 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 [email protected]. > 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
