gpt4 book ai didi

c - 为什么 "long double"类型的变量产生荒谬的输出,而 "float"和 "double"类型工作正常?

转载 作者:太空宇宙 更新时间:2023-11-04 06:34:40 25 4
gpt4 key购买 nike

我想让下面的程序做的就是打印所有小于 30 的正数的乘积(指数和非指数形式)。当变量 product 声明为 floatdouble 时它工作正常,但当类型为 长双。所以请回答由此产生的两个问题:

  1. 为什么 long double 会产生完全荒谬(甚至是负面)的结果,而 floatdouble 类型的变量 产品产生正确的结果?

    我认为 long double 只不过是 double 的“高容量”版本,它本身就是 的“高容量”版本> float 类型!!

  2. 现在关于为 product 产生正确结果的类型,即 floatdouble,它们为什么产生指数形式 (%e) 的输出相同,但非指数形式 (%f) 的输出明显不同?


#include<stdio.h>

int main(void)
{
int j;
float product=1; //Works fine
//double product=1; //Works fine
//long double product=1; //Produces absurd output.


for(j=2;j<=30;j=j+2)
product=product*j;

printf("The product of even numbers <30 is %e \n",product);
printf("The product in non-exponential form is %f",product);
}

product 的输出为 float

The product of even numbers <30 is 4.284987e+16 
The product in non-exponential form is 42849875099910144.000000

product 的输出为 double

The product of even numbers <30 is 4.284987e+16 
The product in non-exponential form is 42849873690624000.000000

product 的输出为 long double

The product of even numbers <30 is -6.078565e-192 
The product in non-exponential form is -0.000000

最佳答案

因为您使用了错误的格式说明符来打印它。 floatdouble 作为 double 传递给 printf() 函数(由于适用于它的默认提升规则因为它是可变的),但是 long double 作为 long double 传递,你必须为它使用 %Lf 转换说明符,否则你的程序调用未定义的行为。

关于c - 为什么 "long double"类型的变量产生荒谬的输出,而 "float"和 "double"类型工作正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com