在计算机科学中,接近0的小浮点数和远离0的大浮点数之间有什么区别吗?
不,完全没有区别(忽略精度问题)。浮点数总是使用符号、分数和指数来表示数字。它的“大小”不会有任何差异,并且在小数或整数的情况下使用某种整数替换也没有意义(只会增加额外的开销)- 无论如何,为了计算,您仍然需要将它们转换回去。
这取决于你所谈论的计算类型。将两个数字相加可能需要相同的时间长度,无论数字的大小如何。在除法的情况下,操作数的大小可能会有所不同-例如,请参见Intel参考手册第C.34页:
如果您尝试编译以下代码,则可以看到其效果:
// Compile with -O0 to avoid optimising out loop!
#include <iostream>
#include <sys/time.h>
#include <limits>
void test(float a, float b)
{
struct timeval start, end;
gettimeofday(&start, NULL);
for (size_t i=0; i<500000; ++i)
{
float result = a/b;
}
gettimeofday(&end, NULL);
long seconds, useconds;
seconds = end.tv_sec - start.tv_sec;
useconds = end.tv_usec - start.tv_usec;
double ms = ((seconds) * 1000 + useconds/1000.0);
std::cout << a << "/" << b << " takes " << ms << "ms" << std::endl;
}
int main()
{
test(1,2);
test(0.0005,1.0e+35);
}
给我以下输出
1/2 用时 1.032 毫秒
0.0005/1e+35 用时 32.287 毫秒
我相信当这些数字可以放在同一数据类型中时,它们之间没有区别。
1/b
一次,然后乘以500,000次)。 - MSalters