【发布时间】:2021-10-03 08:43:35
【问题描述】:
始终使用浮点类型来表示整数有哪些潜在的缺点,即使在索引到数组时也是如此?假设一个面向性能的 C 库的上下文。在 64 位整数和 64 位浮点之间进行选择。
我对做这样的事情感到不舒服,因为doubles 不意味着用于索引,并且将工具用于它不是为它设计的东西通常会带来风险。但我想了解是否有合理的理由避免这样做。
把显而易见的事情排除在外:
- 当然,在
double和[ ]运算符一起使用时可能需要进行一些强制转换。 - 当然,IEEE 754
double不能像 64 位整数类型那样表示尽可能多的不同整数,但在可预见的未来,53 位可能已经足够索引数组了。
事实上,浮点类型的这种用法很普遍。例如,R 没有 64 位整数,并且通过使用 doubles 进行索引来支持大型数组。在编写必须与 R 互操作的代码时,必须考虑是否要这样做。
【问题讨论】:
-
如果 Javascript 不足以让你远离这种愚蠢的行为,那么大概什么都不会。
-
@EOF 我不懂 Javascript。我发现自己处于一种正在考虑这一点的情况(因为 R),虽然它“感觉是个坏主意”,但我希望收集一些理性的论据,而不是仅仅遵循感觉对或错的观点。
-
它肯定会慢得多并且可能占用更多空间(除非您将
double与 64 位整数进行比较)。在某些没有 FP 单元的嵌入式处理器上尤其如此,因此模拟此类操作非常慢(例如,整数运算的 100 倍以上)。 -
浮点计算比整数计算需要更多的周期。因此,对于性能敏感的应用程序/库,它很可能不是一个好的选择。
-
与被(编辑)污染的软件交互是我们许多人必须不时忍受的事情。然而,有一个选择。您可以将(编辑的)严格限制在界面边界,或者让它传播并接管您的整个世界。明智地选择。
标签: c performance floating-point