c - 如何在xinu中打印长双数?
问题描述
函数sqrtl
在这里不起作用,所有给定数字printf
的long 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 */
解决方案
我从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版本的系统。
推荐阅读
- typescript - 带有通用参数的打字稿工厂
- c++ - 如何将 HICON 读入 wchar 数组?
- database - 自定义数据未使用 $wpdb 插入数据库
- kubernetes - Kubernetes "pods.metrics.k8s.io "my-pod-name" 被禁止:用户 "system:serviceaccount:default:default" 无法获取资源 "pods"
- laravel - 我在 php 7.4 下遇到 composer install 错误
- r - 无法使用 match 函数进行匹配并提供 NA 错误
- c# - 从不同线程触发 UI 事件时的 ObjectDisposedException
- java - 为什么在使用 MongoClient 时会出现这种类型的错误?
- reactjs - 如何使 thefun.thefun 成为一个函数?
- regex - 使用 Bash(正则表达式?)从 AIDL 文件中提取方法