我需要计算不同光速百分比的公式。百分比为30,60,90,93,96,99,99.3,99.6,99.9,99.93等,一直到99.999%。 我试图找到一种方法,只使用循环和运算符来获得该序列,但无法得出任何结论。任何帮助将不胜感激!
答案 0 :(得分:2)
百分比是30,60,90,93,96,99,99.3,99.6,99.9,99.93等,一直到99.999%
使用1.0的差异:.7,... .07,... .007,...,几何级数。
每个(1.0 - dif/power10) * 100.0
计算都不依赖于可能引入累积舍入误差的先前FP计算。 1
int main(void) {
double power10 = 1.0;
for (int power = -1; power >= -5; power--) {
power10 *= 10.0;
for (int digit = 3; digit <= 9; digit += 3) {
int dif = 10 - digit;
printf("%g%%\n", (1.0 - dif/power10) * 100.0);
}
}
}
输出
30%
60%
90%
93%
96%
99%
99.3%
99.6%
99.9%
99.93%
99.96%
99.99%
99.993%
99.996%
99.999%
1 power10 *= 10.0;
当然可能达到10 22 。
对于那些喜欢Code Golf的人来说,这是一个适度的尝试,输出如上所述。
int main() {
for(int i=0;i<15;i++)printf("%g%%\n",100-atof((char[]){'7'-i%3*3,'0','e','-','0'+i/3,0}));
}
答案 1 :(得分:1)
解决此问题的方法是编写一个循环,其执行current += 30
三次,然后current += 3
,再次三次,然后current += 0.3
,依此类推。
代码可能如下所示:
int main() {
double current=0;
double toAdd=30;
for (int i=0;i<5;i++) {
for(int j=0; j<3; j++) {
current+=toAdd;
printf("%lf\n",current);
}
toAdd /= 10;
}
}
希望它有所帮助。