我在 spoj http://www.spoj.com/problems/ATOMS/ 上解决了这个问题.我不得不将 log(m/n)/log(k) 的组成部分作为输出。我用了 m, n, k 一样长的时间。当我使用 long double 计算它时,我得到了一个错误的答案,但是当我使用 float 时,它被接受了。
printf("%lld\n", (long long)(log(m / (long double)n) / log(k)));
这是给出了一个错误的答案,但是:
printf("%lld\n", (long long)((float)log(m / (float)n) / (float)log(k)));
被录取了。那么在精度方面是否存在 float 优于 double 的情况?
最佳答案
float
永远不会比 double
更准确,因为根据 C 标准,前者必须是后者的子集:
6.2.5/6:“float 类型的值集是 double 类型值集的子集;double 类型值集是 double 类型值集的子集长双。”
请注意,尽管 IEEE754 特别常见,但该标准不坚持特定的浮点表示。
关于c - 有时 float 比 double 好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30786784/