小浮点数(接近于0)和大浮点数之间是否有任何区别?浮点大小的计算成本
3
A
回答
0
这取决于你在说什么类型的计算。无论数量的大小如何,将两个数字加在一起可能需要相同的时间长度。在分割的情况下,操作数的大小可以有所作为的 - 例如,看到Intel reference manual页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.032ms
0.0005/1E + 35需要32.287ms
4
据我了解处理器是如何工作的,应该有绝对的所有
0
没有什么区别,我相信没有差异,当这些数字可以在同一个数据类型坐。
1
不,根本没有区别(忽略精确度问题)。浮点数字总是使用符号,分数和指数表示一个数字。根据它的“大小”不能有任何区别,并且在小数字或整数时使用某种整数替换不会有任何意义(只会导致额外的开销) - 计算您必须将它们转换无论如何。
4
这一切都取决于用于计算浮点数的平台。一般来说,应该几乎没有差别。在内部,使用规范化的尾数(0.5到1.0之间的值),符号和指数来表示浮点数。小数和大数的区别在于指数的值。
话虽如此,有一个显着的例外。真的很小的浮点数,所谓的低于正常数或非正规化数表示方式不同,有些FPU不支持它们。在这种情况下,他们逃到软件来执行计算,这非常慢。具体来说,这是一个音频软件中的一个问题,在这种软件中,声音可能会衰减到无法听到的声音,但一旦它足够小,就会使计算速度显着减慢。
相关问题
- 1. MASM大会:浮点计算
- 2. C++真的很大的浮点计算
- 3. 在浮点数中计算小数位
- 4. 浮点数计算
- 5. 计算文本大小
- 6. 在浮点计算中点
- 7. c# - 计算器 - 用浮点数计算
- 8. 如何计算浮点列中小数点右边的位数?
- 9. 浮点错误计算
- 10. 蟒蛇浮点计算
- 11. php计算浮点数
- 12. Bash浮点计算问题
- 13. 强制浮点计算
- 14. ERLANG - 默认浮点大小
- 15. C++计算大小
- 16. Appwidget大小计算
- 17. 正在计算浮动图像的TTStyledText的大小
- 18. PHP浮点运算2小数点
- 19. 如何从点大小计算qfont像素大小
- 20. 计算文本大小与NSLayoutManager
- 21. 计算浮点数上的精确值的最大位数
- 22. 计算阵列的大小
- 23. 计算数组的大小
- 24. 计算数组的大小
- 25. 计算元组的大小
- 26. 为什么计算浮点需要大量的电池电量?
- 27. 计算成本
- 28. 计算成本
- 29. 计算浮点的长度是多少
- 30. 获得更准确的浮点计算
您需要确保关闭优化器以进行这些测试,但实际上它们在某些情况下可以完全优化代码。 – Chad 2011-03-30 11:38:30
是的,这很重要!我已经在代码中注释了这个效果,但值得重申... – Matt 2011-03-30 11:40:20
优化器不仅可以删除该行,而且不太具有侵略性的还可以将其转换为乘法(计算'1/b'一次,乘以500.000倍) – MSalters 2011-03-30 16:10:15