c中的double和float的除法

问题描述

我相信double的float精度为x2。

在我的计算器10/3中为3.3333333333333333333333333333333333

当我执行以下代码时:

#include <stdlib.h>
#include <stdio.h>


void main() {


    double var = (double )10 / (double )3;
    float var2 = (float )10 / (float )3;


    printf("%f %f \n",var,var2 );

}

3之后,我得到的位数相同:

3.3333333333333335 3.3333332538604736

为什么我得到的位数相同?为什么价值不同?以及如何对double和float进行除法并获得c中的所有数字和数字(例如在我的计算器中)?

解决方法

默认情况下,printf仅打印有限数量的数字。在我的系统上,它是6位数字。在您的系统上,它似乎是16位数字。

要打印更多数字,请执行以下操作:

    printf("%.60f \n%.60f \n",var,var2 );

输出:

3.333333333333333481363069950020872056484222412109375000000000 
3.333333253860473632812500000000000000000000000000000000000000 

您看到floatdouble都无法打印

3.333333333333333333333333333333333333333333333333333333333333

但是-很明显-doublefloat更近。

顺便说一句:不是void main() {。它应该是int main(void) {