100 {
101 float result = 0.0f;
102 float sign = 1.0f;
103 float fraction = 0.0f;
104 float divisor = 1.0f;
105 int isFractional = 0;
106
108
109
110 if (len == 0) {
111 return 0.0f;
112 }
113
114
116 (str[
pos] ==
' ' || str[
pos] ==
'\t' || str[
pos] ==
'\n' ||
117 str[
pos] ==
'\r' || str[
pos] ==
'\f' || str[
pos] ==
'\v')) {
119 }
120
121
122 if (
pos < len && str[
pos] ==
'-') {
123 sign = -1.0f;
125 }
else if (
pos < len && str[
pos] ==
'+') {
127 }
128
129
131 if (str[
pos] >=
'0' && str[
pos] <=
'9') {
132 if (isFractional) {
133 divisor *= 10.0f;
134 fraction += (str[
pos] -
'0') / divisor;
135 } else {
136 result = result * 10.0f + (str[
pos] -
'0');
137 }
138 }
else if (str[
pos] ==
'.' && !isFractional) {
139 isFractional = 1;
140 } else {
141
142 break;
143 }
145 }
146
147
148 result = result + fraction;
149
150
151 return sign * result;
152}