|
5
|
| angularsen Bcelik · 技术社区 · 16 年前 |
|
1
7
我找不到支持此操作的参考,但我认为原因如下:
另一方面,测试float或double
|
|
|
2
9
亨克完全正确。只是为了增加一点。 这里所发生的是,如果编译器生成的代码能使浮点运算保持在“芯片上”,那么它们就可以以更高的精度完成。如果编译器生成的代码每隔一段时间将结果移回堆栈,那么每次这样做时,额外的预处理就会丢失。 编译器是否选择生成更高精度的代码取决于各种未指定的详细信息:是否编译了debug或retail、是否在调试器中运行、浮动是否在变量或常量中、特定机器的芯片体系结构有,等等。 基本上,你可以保证32位或更好的精度,但你永远无法预测你是否会得到更好的32位精度。因此,您不需要依赖于32位精度,因为这不是我们给您的保证。有时我们会做得更好,有时不会,如果你有时免费得到更好的结果,不要抱怨。 亨克说他找不到这方面的参考资料。C规范第4.1.6节规定:
至于你应该做什么:首先,总是用双打。没有任何理由使用浮点运算。使用浮点数 存储 如果你想;如果你有一百万个,并且想使用400万字节而不是800万字节,那么这是浮点的合理用法。但是floats在运行时会让你付出代价,因为芯片被优化为可以做64位的数学运算,而不是32位的数学运算。 第二,不要依赖于精确或可重复的浮点结果。条件的微小变化会导致结果的微小变化。 |
|
|
Leo · 为什么carg(-0)返回-pi? 1 年前 |
|
Fyodor · 在C中使用sin和cos计算数学表达式不正确? 2 年前 |
|
|
Alexander · 为什么数字的输出不同? 2 年前 |
|
Ronny · 如何防止程序返回“inf”? 2 年前 |
|
|
EMS · 为什么双重打印的值与C中的浮点值相同,而它们的大小不同? 2 年前 |
|
|
Dakolas · 对python十进制库感到困惑 2 年前 |
|
|
RTC222 · 无法获取vrndscalepd的正确舍入模式代码 2 年前 |