使用atan2时负浮点数-2.解析失败,为何需用(-2.)形式?
OCaml中atan2解析
-2.失败的原因 在OCaml中调用atan2处理负浮点数时,输入atan2 -2. 3.会触发解析错误,错误信息如下:
# atan2 -2. 3. ;; Line 1, characters 0-5: Error: This expression has type float -> float -> float but an expression was expected of type int
必须写成atan2 (-2.) 3.才能正常运行,原因如下:
- OCaml的语法规则里,函数调用的优先级高于一元负号运算符。当你写
atan2 -2. 3.时,编译器会错误地把它解析成(atan2 -2) . 3.:- 先尝试把整数
-2传给atan2,但atan2要求的参数是float类型,直接触发类型不匹配错误; - 后面的
. 3.还会被当成OCaml里的字段访问语法,完全不符合实际需求。
- 先尝试把整数
- 给负浮点数加上括号
(-2.)后,编译器会优先解析这个完整的负浮点数,再将其作为第一个参数传给atan2,这样就符合函数调用的语法要求了。
内容的提问来源于stack exchange,提问作者zell
相关产品推荐
相关产品推荐

