Yes, this could be it. First I was fooled by println rounding 2.9 to 3, 
thinking floor is not working properly on Linux.

Thanks!

On Saturday, May 5, 2018 at 1:49:34 AM UTC+3, Steven Hartland wrote:
>
> 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] 
> <javascript:>> 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] <javascript:>.
>> 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.

Reply via email to