gpt4 book ai didi

c - 如何将 char 数组转换为 float 并检查其范围?

转载 作者:行者123 更新时间:2023-11-30 15:28:23 46 4
gpt4 key购买 nike

我正在 Microsoft Visual Studio 2012 中构建一个应用程序,并且有一个接受 char 数组的函数,并且应该返回一个单精度 float 。

我的功能:

Token aa_func08(char lexeme[]){
Token t; /* floating point literal Token to be returned */
double temp; /* floating point value of character array */

temp = atof(lexeme); /* convert character array to floating point value */
if ((FLT_MAX - temp <= FLT_EPSILON) || (temp - FLT_MIN <= FLT_EPSILON)) /* floating point value is outside the accepted range */
return aa_table[ES](lexeme); /* return an error Token */
t.code = FPL_T; /* set Token code */
t.attribute.flt_value = (float)temp; /* set Token integer value to floating point literal value */
return t; /* return floating point literal Token */
}

我想检查浮点值与 float 据类型的最大值和最小值的比较,并且我还需要检查字符数组的长度。

我期望的输出如下:

如果我传入:

1.999999999999999911111111111111111111111111111111111111111111111111111111111111111

我期望得到:2.000000

如果我传入:

999999999999999999999999999999999999999999999999999999999999999999999999999999999.0

我期望得到:99999999999999999999

如果我传入:

0.00000000000000000000000000000000000000000000000000000000000000000000000000000000001

我期望得到:0.000000000000000000

有谁知道我如何才能取得这样的结果,或者至少为我指出正确的方向?谢谢!

编辑

对于第一种情况,结果2.000000由32位 float 表示。另外两个结果只是字符串 lexeme 被截断为前 20 个字符。总而言之,如果 lexeme 表示有效的 float,则它表示为 float ,但如果 lexeme 表示无效的 float (超出范围、小数点后缺少数字等),那么 lexeme 的前 20 个字符就是我返回的内容(不是实际的 float)。

最佳答案

您可能想读一下:What Every Computer Scientist Should Know About Floating-Point Arithmetic

具体来说,您不会从浮点类型(甚至从 double 类型)中获得“99999999999999999999”或 20 位精度。其次,根据您如何转换值,您可能会得到“0.000000000000000000000000000000000000000000000000000000000000000000000000000000000001”的1E-83。您可能还想看看IEEE Floading Point

您的示例与您的目标不符,这表明其中一个都会导致失望。如果需要将字符串转换为 32 位浮点类型,则需要遵守该格式的限制。如果您需要示例描述的精度(和行为),您可能需要编写某种自定义数字类型。

关于c - 如何将 char 数组转换为 float 并检查其范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613904/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com