【问题标题】:Type conversion issue leading to wrong result in multitype expression类型转换问题导致多类型表达式中的错误结果
【发布时间】:2021-04-16 06:31:12
【问题描述】:

我正在做一个涉及多种类型的计算。但是,它给了我错误的结果。

我该如何解决这个问题?

这是我的示例代码:

#include <stdio.h>

int main(void){
    long int numberOfOccurence;
    long int occurencesPerSub = 7;
    long int n = 736778906400;
    int c = 100;

    numberOfOccurence = ((float)occurencesPerSub / c)*n;
    printf("%ld", numberOfOccurence);

    return 0;
}

因此,numberOfOccurence 是 51574525952,但它应该是 51574523448,而不是。

【问题讨论】:

  • 使用双精度而不是浮点数。对于大数,浮点数没有每个自然数的表示。
  • @pqans double 也没有表示所有自然数。只是上限更高了
  • @phuclv 没有固定长度的数据类型可以表示所有自然数;)
  • 是的,你是对的。然而,在大多数这种简单的情况下,当 float 失败时,double 就足够了。

标签: c casting calculation


【解决方案1】:

float 没有足够的精度来产生您需要的答案。

使用转换时,子表达式中的所有类型都必须具有足够的精度来保存完整的结果,以使答案准确。浮点数只有 6-9 位精度。

你的答案在 6-9 位有效数字内是正确的。

【讨论】:

    猜你喜欢
    • 2014-07-01
    • 2015-12-04
    • 2013-05-14
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多