hongcheng 发表于 2022-9-12 19:58:48

为什么double除以double最后输出会是0.0000

        double T,V;
        double R;
        for (int i = 0;i<=M;i++) /*这里是输入数据*/
        {
                scanf("%lf%lf",&T,&V);
                R = V / T;
        }
for (i = 0;i<=M-1;i++)
        {
                printf("%lf %lf %lf\n",T,V,R);
        }

wp231957 发表于 2022-9-12 20:53:25

你咋输入的数据?

gandixiwang 发表于 2022-9-12 21:11:45

额,你试试我帮你改的这个代码?#include<stdio.h>
#define M 1
int main(void)
{
        double T,V;
        double R;
        for (int i = 0;i<M;i++) /*这里是输入数据*/
        {
                scanf("%lf %lf",&T,&V);
                R = V / T;
        }
        for (int i = 0;i<M;i++)
        {
                printf("%lf %lf %lf\n",T,V,R);
        }

        return 0;
}

gandixiwang 发表于 2022-9-12 21:12:47

记得输入数据时输完一个数据打个空格再输下一个数据比如这样:2.5 3.6

编程追风梦 发表于 2022-9-12 21:33:05

我给你回复,你给我设置一个最佳答案谢谢,我冲榜好吧

编程追风梦 发表于 2022-9-12 21:34:09

本帖最后由 编程追风梦 于 2022-9-12 21:35 编辑

编程追风梦 发表于 2022-9-12 21:33
我给你回复,你给我设置一个最佳答案谢谢,我冲榜好吧
这是C语言的long double输出后出现了0.0000的问题

int main(void) {

    long double bug=5.34e-7;
    printf("%Lf or %Le\n", bug, bug);

    return 0;
}

编程追风梦 发表于 2022-9-12 21:35:16

编程追风梦 发表于 2022-9-12 21:34
这是C语言的long double输出后出现了0.0000的问题

这段代码如果放在【微软的VC编译器(MSVC)】里跑是可以显示正常结果的。
但是放在MinGW跑就会出现0.0000的异常结果。

造成这个问题的原因就是MinGW虽然不需要任何第三方的运行库,但是需要微软的运行库,其中包括了MSVCRT.DLL以及其他的微软C语言运行库。所以GCC编译后的程序还是运行在MSVC运行库上的程序。
同时又由于32位的MSVC并不支持更高精度的double类型(在32位的MSVC中long double与double的精度均为8字节=64bit),而GCC在32位的操作系统中long double是12字节=96bit,64位更是16字节=128bit,所以就出现了不兼容的问题。

简单来讲就是如果你用MSVC跑代码,不管写double还是long double,他们都只占用64bit。所以他俩是一样的,所以运行后不会出错。
而MinGW的double是64bit的,而long double是128bit(long double其实表示 80bit 扩展精度浮点数。但为了字节对齐所以就分配成了128bit,多余的bit全部填 0)。
而MinGW实际上还是依靠在MSVC上的,所以使用MinGW跑long double的时候就出现问题了,MSVC只支持64bit的long double,而MinGW的long double是128bit的。所以出现了冲突,不兼容。直接给你打印0.00000

解决办法:
在头文件#include <stdio.h>上面加入#define printf __mingw_printf
也就是全局使用MinGW标准的printf函数进行输出。
或者在函数名称前加上__mingw_(例如__mingw_printf)

或者在使用MinGW的时候不用long double,改用double就可以正常打印输出。
MinGW的double是64bit的,是可以被MSVC所支持的。
而long double是128bit的是不被支持的。
————————————————
版权声明:本文为CSDN博主「Rain:.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43019319/article/details/108981302
页: [1]
查看完整版本: 为什么double除以double最后输出会是0.0000