sparql怎么(1.7/2 = 0.8428572)才能正确?
sparql how (1.7/2 = 0.8428572) can be correct?
我有一个生成的查询:
其中 0.9
和 0.8
是 float 类型。
但是当我进行平均聚合时。我明白了:
更新 1
这是我的代码
select distinct ?item
#?ratingValue
(AVG(?ratingValue) as ?averageRatingValue)
{
values ?user {bo:ania}
?anotherUser a ?d .
?anotherUser rs:hasRated ?rating .
?rating rs:aboutItem ?item .
?rating a rs:Likes .
?rating rs:ratesBy ?ratingValue .
filter (?user != ?anotherUser)
}
group by ?item
如果我不得不猜测(我猜了,因为我们无法访问您的数据或您的查询),我会说您对不止两个值进行平均,这很容易发生如果您的 ratingValue 已经来自某种 aggregation/grouping.
例如,当我 运行
select (avg(?x) as ?avg) {
values ?x { 0.8 0.9 }
}
我得到 0.85。但是
select (avg(?x) as ?avg) {
values ?x { 0.8 0.8 0.8 0.9 0.9 }
}
让我得到 0.84。如果你多加几项,又要处理浮点不精确的问题,你可以很容易地得到一些其他的值。
我有一个生成的查询:
其中 0.9
和 0.8
是 float 类型。
但是当我进行平均聚合时。我明白了:
更新 1
这是我的代码
select distinct ?item
#?ratingValue
(AVG(?ratingValue) as ?averageRatingValue)
{
values ?user {bo:ania}
?anotherUser a ?d .
?anotherUser rs:hasRated ?rating .
?rating rs:aboutItem ?item .
?rating a rs:Likes .
?rating rs:ratesBy ?ratingValue .
filter (?user != ?anotherUser)
}
group by ?item
如果我不得不猜测(我猜了,因为我们无法访问您的数据或您的查询),我会说您对不止两个值进行平均,这很容易发生如果您的 ratingValue 已经来自某种 aggregation/grouping.
例如,当我 运行
select (avg(?x) as ?avg) {
values ?x { 0.8 0.9 }
}
我得到 0.85。但是
select (avg(?x) as ?avg) {
values ?x { 0.8 0.8 0.8 0.9 0.9 }
}
让我得到 0.84。如果你多加几项,又要处理浮点不精确的问题,你可以很容易地得到一些其他的值。