5
|
angularsen Bcelik · 技术社区 · 15 年前 |
![]() |
1
7
我找不到支持此操作的参考,但我认为原因如下:
另一方面,测试float或double
|
![]() |
2
9
亨克完全正确。只是为了增加一点。 这里所发生的是,如果编译器生成的代码能使浮点运算保持在“芯片上”,那么它们就可以以更高的精度完成。如果编译器生成的代码每隔一段时间将结果移回堆栈,那么每次这样做时,额外的预处理就会丢失。 编译器是否选择生成更高精度的代码取决于各种未指定的详细信息:是否编译了debug或retail、是否在调试器中运行、浮动是否在变量或常量中、特定机器的芯片体系结构有,等等。 基本上,你可以保证32位或更好的精度,但你永远无法预测你是否会得到更好的32位精度。因此,您不需要依赖于32位精度,因为这不是我们给您的保证。有时我们会做得更好,有时不会,如果你有时免费得到更好的结果,不要抱怨。 亨克说他找不到这方面的参考资料。C规范第4.1.6节规定:
至于你应该做什么:首先,总是用双打。没有任何理由使用浮点运算。使用浮点数 存储 如果你想;如果你有一百万个,并且想使用400万字节而不是800万字节,那么这是浮点的合理用法。但是floats在运行时会让你付出代价,因为芯片被优化为可以做64位的数学运算,而不是32位的数学运算。 第二,不要依赖于精确或可重复的浮点结果。条件的微小变化会导致结果的微小变化。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |