作为一个个人项目,我一直在为我自己的C语言编写一个编译器来定位我自己设计的CPU模拟器。

作为其中的一部分,我想实现一个标准浮点库(典型的IEEE单精度),但我一直在努力想办法以易于阅读的方式打印浮点数(如1.2345而不是原始数据整数),我能想到的最好的是生成log 10 2的值并进行一些奇数乘法以获得适合打印的数字。

是否存在将浮点数转换为易于打印的形式或打印浮点数的算法,该浮点数可以在不使用printf("%f",float_value); 或者用C语言输入演员表?

===============>>#1 票数:6

据我了解,目前用于打印浮点数的技术是Florian Loitsch的Grisu算法系列。 你可以在这里阅读论文。

为了更简单地介绍将二进制浮点数转换为十进制(反之亦然)的问题,我完全推荐Rick Regan的网站, http://www.exploringbinary.com/

===============>>#2 票数:3

它可能是函数的脏黑客,但您可以将其用作函数的基础,以正确显示浮点数。 它不使用任何其他辅助功能,除了putchar实际打印的东西,它并不涵盖所有情况(如你的数字是NaN,甚至是负面的!)但是,它只是一个起点:

#include <stdio.h>

void printfloat (float n)
{
    int whole = n;
    int power = 1;
    int digit;

    /* Find out the largest divisor for printing the integer part */
    while (whole>=1)
    {
        whole /= 10;
        power *= 10;
    }
    power /= 10;

    /* Prints the integer part of the number */
    whole = n;
    while (power>=1)
    {
        digit = whole/power;
        whole %= power;
        putchar ('0'+digit);
        power /= 10;
    }

    /* Prints the decimal point */
    putchar ('.');

    /* And now the fractional part */
    n = n-(int)n;
    while(n!=0)
    {
        digit = n*10;
        putchar ('0'+digit);
        n*=10;
        n = n-(int)n;
    }
    putchar ('\n');
}

int main()
{
    float n = 123.45678;

    printfloat(n);
    return 0;
}

你可以在这里测试一下: http//goo.gl/V4pgNZ

  ask by Xandros translate from so

未解决问题?本站智能推荐:

3回复

处理小数的简单C程序[重复]

这个问题已经在这里有答案 : 7年前关闭。 可能重复: 浮点数与浮点数文字的比较中的奇怪输出 因此,程序只读取一堆数字,然后通过除以输入的总数来求出平均值。 但是,最终结果在
6回复

在D语言中比较两块内存的最有效方法是什么?

我需要一个内存块的比较函数,用于对D编程语言中的字节数组进行二进制搜索。 它不需要任何有用的语义。 它只需要很快并且是一个有效的比较函数(产生总排序的函数)。 已知要比较的存储器块具有相同的长度。 C的memcmp实际上非常慢,因为它试图保留有用的字符串比较语义,这是我不需要的。
3回复

与C语言等效的汇编语言

我试图找到与以下程序集相当的C语言: 我得到“开始”部分。 似乎是一个循环,从函数接受参数并将其与%ecx中的参数进行比较。 如果满足jge条件,则该函数返回,如果不满足,则将%edx加4%ecx,将其移至%eax,递增%ecx,然后再次循环。 我真的不明白“神秘”部分。 特
3回复

高级语言的低级功能[关闭]

我想知道一些高级语言的低级功能。 我可能会指出:-按位运算-位域-指针算术-内联汇编-中断函数 如果您指出了一些我不在列表中的信息,我将不胜感激。 如果C或Pascal有它们,那就太好了,但是基本上任何高级语言都可以。 谢谢。
4回复

C语言中的低级函数调用?

假设我们有一个位于已知地址的函数func 。 我们不知道此函数需要多少个参数或什么样的数据类型。 我们给了一个包含数据的数组,该数据对应于函数期望的正确字节数。 例如,假设我们有功能func(uint8_t a, uint16_t b, uint8_t c) ,所述阵列将是0x0A,
3回复

C语言在不同体系结构上的文件操作

作为一个研究项目,我们在标准C(BINARY)文件处理库(stdio)之上编写了一个抽象层,为事务处理文件提供了一些额外的功能。 工作流程如下: 用户使用我们的API(或使用标准fopen )打开文件。 两者都返回FILE* 。 文件以BINARY模式打开! 用户使用
12回复

C语言作为“低级”语言有多“低”? [关闭]

我们经常听说C是一种低级语言,但它有多低? 我所知道的最低级别是使用指针的内存管理。 我还有更进一步的发现水平吗? “靠近硬件”是什么意思? “靠近硬件”的C怎么样?
1回复

是否可以从字符串作为用户输入或从文件中以C / C ++(或任何其他语言)创建用户定义的数据类型

好吧,这可能是一个很奇怪的问题,但是我对此颇有好奇。 所以就这样... 注意:让我们在这里考虑语言C。 作为程序员,我们通常在源代码中使用适当的名称定义用户定义的数据类型(例如struct)。 假设我有一个程序,其中的结构定义为: 而且我已经开始执行该程序。 现在,
3回复

是否可以使用任何低级语言代替脚本?

我是一个“高级”脚本专家。 我所有的代码都是基于类的PHP或JavaScript。 但是,我想知道对于“低级”编译语言(例如C或C ++)是否有任何形式的有用的解释器项目(听起来有些奇怪?)。 这一切都是在我偶然发现http://g-wan.com/时发生的,并且对您可以设置C代码作为
2回复

Javascript-价格和浮动

我正在对价格执行一些运算, ie decimal numbers such as 999.99 问题是我找不到在JavaScript中使用浮点的替代方法。 浮动汇率并非完全准确,定价也不够准确。 运算包括乘法,加法,减法和除法。 通常,编程语言具有定点十进制库,但是找不到与J