C 如何在Xiu中打印长双号?

C 如何在Xiu中打印长双号?,c,printf,long-double,C,Printf,Long Double,函数sqrtl在这里不起作用,long double的printf也为所有给定的数字打印f: #include <conf.h> #include <kernel.h> #include <math.h> #include <float.h> long double sqrtn; unsigned long int n; void xmain() { unsigned long int n; printf("En

函数
sqrtl
在这里不起作用,
long double的
printf
也为所有给定的数字打印
f

#include <conf.h>
#include <kernel.h>
#include <math.h>
#include <float.h>

long double sqrtn; 
unsigned long int n;    

void xmain() {
    unsigned long int n;   
    printf("Enter unsigned long integer:\n"); 
    scanf("%lu", &n); 
    sqrtn = sqrtl(long double)n);
    printf("\nsqrtn=%Lf\n", sqrtn); 
} /* main */
#包括
#包括
#包括
#包括
长双sqrtn;
无符号长整数n;
void xmain(){
无符号长整数n;
printf(“输入无符号长整数:\n”);
scanf(“%lu”、&n);
sqrtn=sqrtl(长双)n);
printf(“\nsqrtn=%Lf\n”,sqrtn);
}/*主要*/

我从下载了x86的Xinu源代码

看看
printf
lib/printf.c
lib/doprnt.c
)的实现,就我所知,它根本不支持长度修饰符。例如,这意味着:

long int n = 42;
printf("%ld\n", n);
不起作用。我建议在你的系统上试试

这不是一个符合要求的C实现(而且可能不是有意的)

它似乎支持大多数标准转换说明符(
%d”
%u”
%x”
%f”
,等等)

如果要打印
长双精度
值,我认为最好的方法是将其转换为
双精度
,并使用
“%f”
(这可能会丢失范围和/或精度),或者编写自己的代码将
长双精度
值转换为字符串。(或在其他系统上运行代码)


免责声明:我没有尝试过,我只检查了源代码,并且只检查了x86版本的系统。

我担心long double无法打印。 我写了一个小测试,发现我的MAC电脑想要%Lf%Le
看来必须使用大写字母L。

您是为userland还是内核模块编译程序?能否打印
sizeof(长双精度)
的值?它应该是12个字节。您是否也在旧的3B2机箱或intel CPU上运行?另一个提示:您是否将程序链接到
-lm
以添加对
printf
的浮点支持?有关Xinu的更多信息:“Function
sqrtl
在这里不起作用”是什么意思?如果您收到错误消息,请将其包含在您的问题中。程序中的括号不匹配。请复制并粘贴您的实际代码。使用符合要求的实现,
printf(“%Lf\n”,sqrtn)
应能正常工作。Xinu实现可能不支持某些内容。请编写自己的代码,将
长双精度值转换为字符串。。。不适合胆小的人。所以骑,勇敢地骑,到彩虹的尽头,骑,勇敢地骑,直到你找到艾尔Dorado@chqrlie编写自己的代码可能包括复制开源实现。