问题描述
我相信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
您看到float
和double
都无法打印
3.333333333333333333333333333333333333333333333333333333333333
但是-很明显-double
比float
更近。
顺便说一句:不是void main() {
。它应该是int main(void) {