【发布时间】:2010-12-28 11:24:23
【问题描述】:
首先,我的上下文是需要将浮点文字(字符串)转换为浮点/双精度值的编译器编写者的上下文。在过去的 15 年里我没有做过任何浮点编程,所以我很确定这是一个完全愚蠢的新手问题。
double res;
errno=0;
*res = strtod((const char*)literal,NULL);
if (errno==ERANGE) throw_a_literal_out_of_range_exception();
return res;
但是c运行时库中没有“strtof”函数?
编辑:澄清。我已经知道字符串 'literal' 是 C 浮点的有效模式。它已经通过了正则表达式测试。我只是想检查是否存在范围/精度问题。
原因是用户可以在 Eiffel 源代码中编写
a := {REAL_32} 3.1415
b := {REAL_32} 3.0E200
将写入的浮点数转换为 32 位浮点数。我认为在第二种情况下,编译器应该检测到值超出范围并引发错误或至少是警告。
【问题讨论】:
-
为什么需要它是浮点数而不是双精度数?
-
我认为您应该将文字转换为双精度。然后继续演员阵容。在施法时,您应该检查双精度值是否在浮点数范围内。
标签: c floating-point type-conversion