[ 
https://issues.apache.org/jira/browse/TINKERPOP-2642?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17710284#comment-17710284
 ] 

Cole Greer commented on TINKERPOP-2642:
---------------------------------------

I would argue that the proposed semantics here should be slightly altered to 
follow the IEEE 754 NaN comparability rules. IEEE 754 states that any eq, lt, 
gt, lte, or gte comparison between one or more NaN's should return false. Also 
any neq comparison with at least one NaN (including NaN != NaN) should always 
return true. Based on this I would suggest amending the proposal as follows:


{code:java}
gremlin> g.addV().property('key',-5)
==>v[0]
gremlin> g.addV().property('key',0)
==>v[2]
gremlin> g.addV().property('key',5)
==>v[4]
gremlin> g.addV().property('key',Double.NaN)
==>v[6]
gremlin> g.V().values("key").is(lte(Double.NaN)) // 3.5.x
==>-5
==>0
==>NaN
gremlin> g.V().values("key").is(gte(Double.NaN)) // 3.5.x
==>0
==>5
==>NaN
gremlin> g.V().values("key").is(lt(Double.NaN)) // 3.5.x
==>-5
gremlin> g.V().values("key").is(gt(Double.NaN)) // 3.5.x
==>5
gremlin> g.V().values("key").is(lte(Double.NaN)) // proposed
gremlin> g.V().values("key").is(gte(Double.NaN)) // proposed
gremlin> g.V().values("key").is(lt(Double.NaN))  // proposed
gremlin> g.V().values("key").is(gt(Double.NaN))  // proposed 
gremlin> g.V().values("key").is(neq(Double.NaN)) // proposed 
==>-5
==>0
==>5
==>NaN
gremlin> g.V().values("key").is(eq(Double.NaN))  // proposed {code}

> Comparability for NaN and nulltype
> ----------------------------------
>
>                 Key: TINKERPOP-2642
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2642
>             Project: TinkerPop
>          Issue Type: Improvement
>          Components: process
>    Affects Versions: 3.5.1
>            Reporter: Stephen Mallette
>            Priority: Major
>              Labels: breaking
>
> * Comparing on {{NaN}} should return no results.
> * Comparability throws exception today but should return {{nulltype}} when 
> comparing incompatible types.
> ** When Vertex /Edge/VertexProperty  is compared, today it throws but it 
> should return {{nulltype}}.
> ** When {{nulltype}} is compared, today it throws an exception but it should 
> return {{nulltype}} 
> {code}
> gremlin> g.addV().property('key',-5)
> ==>v[0]
> gremlin> g.addV().property('key',0)
> ==>v[2]
> gremlin> g.addV().property('key',5)
> ==>v[4]
> gremlin> g.addV().property('key',Double.NaN)
> ==>v[6]
> gremlin> g.V().values("key").is(lte(Double.NaN)) // 3.5.x
> ==>-5
> ==>0
> ==>NaN
> gremlin> g.V().values("key").is(gte(Double.NaN)) // 3.5.x
> ==>0
> ==>5
> ==>NaN
> gremlin> g.V().values("key").is(lt(Double.NaN)) // 3.5.x
> ==>-5
> gremlin> g.V().values("key").is(gt(Double.NaN)) // 3.5.x
> ==>5
> gremlin> g.V().values("key").is(lte(Double.NaN)) // proposed
> ==>NaN
> gremlin> g.V().values("key").is(gte(Double.NaN)) // proposed
> ==>NaN
> gremlin> g.V().values("key").is(lte(Double.NaN)) // proposed
> gremlin> g.V().values("key").is(gte(Double.NaN)) // proposed
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to