主要观点:大多数编程语言支持浮点数,能将字符串转为浮点数,但字符串通常不能精确表示,如“1e-1000”太小,“1e1000”太大,多数语言将其表示为 0 和“infinity”。
关键信息:
- Python 中,
float("1e-1000")
为 0.0,float("1e1000")
为 inf。 - Go 语言中,
strconv.ParseFloat("1e-1000", 64)
结果为 0,strconv.ParseFloat("1e1000", 64)
结果为 inf 且触发错误(可忽略)。 - C 语言中,
strtod
函数对“1e-1000”和“1e1000”处理为范围错误,分别得到 0.000000 和 inf。 - C++中:在 LLVM/libc++下代码不构建,因缺少浮点数解析支持;在 Visual Studio 下与 C 相同;GCC/glibc++依赖[fast_float 库],添加特殊处理,解析时丢弃值,无法区分“1e1000”和“1e-1000”,均为“out of range”值,初始化变量时为-1;有趣的是,GCC/glibc++和 Microsoft Visual Studio 解析字符串“inf”时会返回 infinity 且不触发范围错误。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。