TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320F2.8377万S:__divf32和double?

Guru**** 2046970 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/627962/compiler-tms320f28377s-__divf32-and-double

部件号:TMS320F2.8377万S

工具/软件:TI C/C++编译器

您好,

SPUR514L (编译器C/C++)中有一章介绍编译器内部函数。

我的问题是关于"__dif32"

文档说:

双精度__divf32 (双数,双数)

因此,输入和输出为“双精度”=>浮点64位。

函数的名称是_divf32


操作员是在转换为32位的输入上完成还是在64位上完成?

说明"/"有何区别?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    A GIR 说:
    因此输入和输出为"double"=> float 64位。[/QUOT]

    不正确。  类型double为32位。  长双精度型为64位。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的

    你说得对,这是在§6.4 的一章中写的。

    这是特定于C2000编译器的。 这就是我犯了错误的原因!

    在IEEE标准中,float是32位,而double是64位。

    那么,我们如何解释标准C/C++函数,如下所示?


    长整型圆形(浮子x);

    长整型圆形 (双x);

    长整型圆形(长双倍x);

    使用标准的IEEE编译器,我们应该了解:

    long int lroundf (float x); => input x是 32位

    长整型圆形 (双x); => 输入x为 64位

    long int lroundl (long double x);=> input x是 80或96位或更多位

    但是,如果我理解,使用为C2000编译器提供的库,我们应该了解:

    long int lroundf (float x); => input x是 32位

    长int lround (双x); => input x是 32位

    long int lroundl (long double x);=> input x是 64位

    在全球范围内,当标准IEEE函数定义“双精度”时,我们必须考虑该函数是32位浮点,或者C2000编译器将标准函数“双精度”替换为“长双精度”以保持64位精度?

    谢谢

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [QUETE USER="A GIR]在IEEE标准中,float是32位,而double是64位。[/QUET]

    我不确定IEEE标准是否这么说。  它确实定义了不同宽度的浮点类型。  但是,在任何特定编译器中如何使用它们还没有定义。  尽管如此,您认为许多C编译器都是以这种方式实现类型float和double的,这是正确的。  C2000的工作方式是不寻常的,但我认为它并不违反任何标准。

    A GIR 说:

    但是,如果我理解,使用为C2000编译器提供的库,我们应该了解:

    long int lroundf (float x); => input x是 32位

    长int lround (双x); => input x是 32位

    long int lroundl (long double x);=> input x是 64位

    [/引述]

    正确。

    [QUETE USER="A GIR]在全球范围内,当标准IEEE函数定义“双精度”时,我们必须考虑该函数为32位浮点,或者C2000编译器将标准函数“双精度”替换为“长双精度”以保持64位精度?[/QUET]

    在所有情况下,无论是标准RTS函数还是用户定义的函数,类型double始终表示32位。  要获得64位,必须显式使用long double类型。  在任何情况下,双精度均不意味着超过32位。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    George mock 说:
    C2000的工作方式很不寻常,但我认为它不违反任何标准。

    不正确。  虽然C的ANSI标准从不直接说double必须是64位宽,但它确实列出了32位IEEE格式不符合的double类型的一些最低要求。  最后,ANSI要求双精度为64位。  C2000编译器违反了ANSI C标准的这一方面。

    谢谢,此致,

    -George