假设我有一个函数f(x) = x * 10 ^ -N
在这种情况下,只要
,最大的N就是什么 f(1) < f(2)
f(2) < f(3)
等,只要结果在-1和1之间,就可以达到x = 10
结果存储在4字节的浮点数后?
例如,我知道N = 50是不可接受的,因为在存储在4字节的浮点数之后,任何数字最多10变成0。
还有什么是最大的N,结果仍然可以说90%准确?
编辑:有问题的硬件:基于x86的现代处理器
EDIT2:与此同时,我创建了这个简单的东西来强制测试其准确性:
int main() {
double dbl;
float sng;
for (int i = 0; i < 100; i++) {
double increment = std::pow(10, -i);
dbl = 0;
while (dbl < 1) {
dbl += increment;
sng = dbl;
double check = (double)sng / dbl;
if (check != 1) {
if (check < 0.9 || check > 1.11111) {
std::cout << "Fail at N = " << i;
goto stop;
}
}
}
std::cout << "Checked " << i << "\n";
}
stop:
return 1;
}
现在已经停留在N = 9了一段时间......现在可以完成任何一秒或者一千年后......