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.
工具/软件: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