Как напечатать длинный двойной номер в Xinu? - PullRequest
1 голос
/ 02 мая 2020

Функция 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 */

1 Ответ

1 голос
/ 04 мая 2020

Я скачал исходный код Xinu для x86 с https://xinu.cs.purdue.edu/files/Xinu-code-Galileo.tar.gz.

Насколько я могу понять реализацию для printf (lib/printf.c lib/doprnt.c) сказать, что он просто не поддерживает модификаторы длины. Это означает, что, например, это:

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

не будет работать. Я предлагаю попробовать это в вашей системе.

Это не соответствует реализации C (и, вероятно, не предназначено).

Кажется, она поддерживает большинство стандартных спецификаторов преобразования ("%d", "%u", "%x", "%f", et c.).

Если вы хотите напечатать значение long double, я думаю, что лучшее, что вы можете сделать, это либо преобразовать его в double и использовать "%f" (который может потерять диапазон и / или точность) или написать собственный код для преобразования значения long double в строку. (Или запустите ваш код в другой системе).

Отказ от ответственности: я не пробовал этого, я только изучил исходный код и только для x86-версии системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...