首页 > 解决方案 > 如何在xinu中打印长双数?

问题描述

函数sqrtl在这里不起作用,所有给定数字printflong double打印也是: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 */

标签: cprintflong-double

解决方案


我从https://xinu.cs.purdue.edu/files/Xinu-code-Galileo.tar.gz下载了 x86 的 Xinu 源代码。

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

long int n = 42;
printf("%ld\n", n);

行不通。我建议在你的系统上尝试。

这不是一个符合标准的 C 实现(它可能不是有意的)。

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

如果您想打印一个long double值,我认为您能做的最好的事情是将其转换为double并使用"%f"(这可能会丢失范围和/或精度)或编写自己的代码将long double值转换为字符串。(或者在不同的系统上运行你的代码)。

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


推荐阅读