K&R 书本练习 4-2
K&R book exercise 4-2
我正在研究 K&R 书。我目前在第 4 章。我正在阅读第 71 页上的 atof() 函数。函数 atof(s) 将字符串转换为其等效的双精度浮点数。
atof()的代码如下:
//atof: 将字符串 s 转换为 double
double atof2(char s[])
{
double val, power;
int i, sign;
for (i = 0; isspace(s[i]); ++i) //skip white space
;
sign = (s[i] == '-') ? -1: 1;
if (s[i] == '-' || s[i] == '-')
++i;
for (val = 0.0; isdigit(s[i]); i++)
val = 10.0 * val + (s[i] - '0');
if (s[i] == '.')
++i;
for (power = 1.0; isdigit(s[i]); i++) {
val = 10.0 * val + (s[i] - '0');
power *= 10.0;
}
return sign * val / power;
}
我的问题是关于变量:power。为什么我们需要它?
我确实理解变量的用法:"val",但我不确定变量:"power"。为什么我们要用幂来划分 val?
变量power
用于数字除以幂,得到浮点数的结果。
让你的字符串为 -12.83
,然后第一个 for
循环将检查 space 并递增 i
因为没有 space 所以,i=0
。
sign
将 -1
作为 s[i]=s[0]='-'
。
在接下来的两个循环中,字符串的值被转换为整数并存储在 val
中(excluding .
- 自己计算)。
现在在两个循环之后 val
将是 1283
。但是最后一个循环将迭代 2
次并且 power
将更改为 100.00
(第一次迭代中的 10*1.0
和第二次迭代中的 10*10.0
)。
现在获取浮点数 val
除以 power
并乘以 sign
的值。
所以,return 是 -1*1283/100
,因此 -12.83
是你的浮点数。
我正在研究 K&R 书。我目前在第 4 章。我正在阅读第 71 页上的 atof() 函数。函数 atof(s) 将字符串转换为其等效的双精度浮点数。
atof()的代码如下:
//atof: 将字符串 s 转换为 double
double atof2(char s[])
{
double val, power;
int i, sign;
for (i = 0; isspace(s[i]); ++i) //skip white space
;
sign = (s[i] == '-') ? -1: 1;
if (s[i] == '-' || s[i] == '-')
++i;
for (val = 0.0; isdigit(s[i]); i++)
val = 10.0 * val + (s[i] - '0');
if (s[i] == '.')
++i;
for (power = 1.0; isdigit(s[i]); i++) {
val = 10.0 * val + (s[i] - '0');
power *= 10.0;
}
return sign * val / power;
}
我的问题是关于变量:power。为什么我们需要它?
我确实理解变量的用法:"val",但我不确定变量:"power"。为什么我们要用幂来划分 val?
变量power
用于数字除以幂,得到浮点数的结果。
让你的字符串为 -12.83
,然后第一个 for
循环将检查 space 并递增 i
因为没有 space 所以,i=0
。
sign
将 -1
作为 s[i]=s[0]='-'
。
在接下来的两个循环中,字符串的值被转换为整数并存储在 val
中(excluding .
- 自己计算)。
现在在两个循环之后 val
将是 1283
。但是最后一个循环将迭代 2
次并且 power
将更改为 100.00
(第一次迭代中的 10*1.0
和第二次迭代中的 10*10.0
)。
现在获取浮点数 val
除以 power
并乘以 sign
的值。
所以,return 是 -1*1283/100
,因此 -12.83
是你的浮点数。