附录A: 一般错误和问题

浮点数的精度限制

没有任何一台计算机能够以完美的精度存储所有浮点数(即非整数)。 浮点数据类型(即FLOAT)提供大约7个十进制数字的精度; 双浮点数据类型(即DOUBLE)将其提高到大约15个十进制数字的精度。 所以假设某个计算涉及到比较两个FLOAT数或DOUBLE数是否到精确相等的问题(如==,<=,> =,BETWEEN ... AND ...),则结果有可能和我们的预期不符。 如果GSQL解析器检测到用户可能正在对FLOAT或DOUBLE数进行精确比较,则系统会显示告警和建议信息。 例如,假设对于浮点变量v和v2来说,表达式v == v2会触发以下警告消息:

The comparison 'v==v2' may lead to unexpected behavior because it involves
equality test between float/double numeric values. We suggest to do such
comparison with an error margin, e.g. 'abs((v) - (v2)) < epsilon', where epsilon
is a very small positive value of your choice, such as 0.0001.
'v==v2'的操作可能会产生异常的结果,因为它包含了两个float/double数字的比较。
我们建议如果需要做该类型的比较,最好可以引入一个冗余度。
例如使用'abs((v) - (v2)) < epsilon'语句,其中epsilon是一个非常小的正数,
例如你可以选择让它等于0.0001)

对于不存在的顶点ID的响应

如果某个查询包含顶点参数(VERTEX或VERTEX <vType>),并且在查询执行期间时给出了一个并不存在的顶点的ID,则系统会显示错误消息,并终止查询。 同时,调用函数将某个单个顶点的ID字符串转换成顶点的时候,系统的响应方式也是类似的:

  • to_vertex(): 详见"其他方程"章节.

但是,如果参数是一个顶点集(SET <VERTEX>或SET <VERTEX <vType >>),并且在查询执行期间给出了一个或多个不存在的ID,则系统会显示一条警告消息,并继续执行该查询而忽略那些不存在的ID。 因此,如果所有给定的ID都不存在,则该参数将变为一个空集。 调用函数将一组顶点ID转换为一组顶点时,系统的响应方式也是类似的:

  • to_vertex_set(): 详见"其他方程"章节.

  • SelectVertex(): 详见"其他方程"章节.

Last updated