Tag: 浮点

混合程序(.asm + .cpp):修改小数学程序的代码以包含浮点输入

(Intel x86.TASM和BorlandC编译器,以及TLINK使用。) 在main1.cpp ,程序接受int输入(直到输入小于-999999的数字),将其放入数组x[] ,将输入数量放入数组的第0个元素,将数组的指针发送到f1.asm ,添加数字,并将结果返回到main1.cpp以便显示它。 如何修改它以包含浮点数作为输入? 我的具体问题: 当我将int转换为float ,输入在f1.asm的偏移量的f1.asm发生变化,而我找不到它; .asm浮点数的数学运算。 (我无法理解我在其他地方找到的.asm花车的解释。) 先感谢您。 main1.cpp: #include #include #include extern “C” int f1( int* x ); int main() { int x[100], i ; for( i = 1 ; x[i-1]>=-999999 ; i++ ) { cout << "x[" << i <> x[i] ; // Input elements while they’re >= […]

DBL_MAX的类型

我在某处看到了这段代码 printf(“DBL_MAX : %g\n”, (double) DBL_MAX); 演员是必要的吗? 我在标准中找不到任何指定DBL_MAX必须实际拥有(或提升)类型为double 。

浮点exception – gcc bug?

请考虑以下代码: #include #include int main() { #pragma STDC FENV_ACCESS ON 1.0/0.0; printf(“%x\n”, fetestexcept(FE_ALL_EXCEPT)); } 我希望它打印一个对应于FE_DIVBYZERO的非零值,但它会打印0.将main的第二行更改为double x = 1.0/0.0; 给出了预期的行为。 这是允许的,还是一个bug? 编辑:对于它的价值,起初似乎在大多数现实世界的代码中,可能导致引发fenvexception的操作无法优化,因此可以安全地执行大型计算并在最后检查是否有溢出,div-by-zero等发生了。 但是,当您考虑内联和优化时,事情会变得混乱,并且会出现真正的问题。 如果这样的函数在由于常量参数总是最终除以零的情况下被内联,那么gcc可能会变得非常聪明并优化整个内联函数,主要是为了return INFINITY; 没有提出任何例外。

如何在没有FPU的计算机上计算浮点数

C语言有一个数据类型float 。 一些机器具有浮点处理器,其执行所有浮点计算。 我的问题是:是否有一些没有浮点处理器的机器? 这些机器如何使用浮点?

C如何计算没有浮点精度的百分比(perthousands)

如何计算从2个int值到表示百分比的int值的百分比(为了更准确度,数百个)? 背景/目的:使用没有FPU的处理器,浮点计算需要花费100倍的时间。 int x = 25; int y = 75; int resultPercentage; // desire is 250 which would mean 25.0 percent resultPercentage = (x/(x+y))*1000; // used 1000 instead of 100 for accuracy printf(“Result= “); printf(resultPercentage); 输出: 结果= 0 当我真正需要的是250.我不能使用任何浮点计算。 正常fpu计算的示例: int x = 25; int y = 75; int resultPercentage; // desire is 250 which […]

浮点再次

昨天我问了一个浮点问题,我有另一个问题。 我正在做一些计算,我使用math.h(C语言)正弦,余弦和正切函数的结果。 其中一位开发人员喃喃地说,你必须小心这些函数的返回值,我不应该对gcc数学函数的返回值做出假设。 我不是想开始讨论,但我真的想知道在使用标准数学函数进行计算时需要注意什么。 X

将IEEE 754 Float转换为MIL-STD-1750A Float

我试图将IEEE 754 32位单精度浮点值(标准c浮点变量)转换为MIL-STD-1750A格式的无符号长变量。 我在post的底部包含了IEEE 754和MIL-STD-1750A的规范。 现在,我在代码转换指数时遇到问题。 我也看到了转换尾数的问题,但我还没有解决这些问题。 我使用上面链接中表3中列出的示例来确认我的程序是否正确转换。 其中一些例子对我没有意义。 这两个例子如何具有相同的指数? .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0000) -1 x 2^0 (1000 0000 0000 0000 0000 0000 0000 0000) .5 x 2 ^ 0有一个小数位,-1没有小数位,所以.5 x 2 ^ 0的值应该是 .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0010) 对? (而不是0001,因为1750A使用加1偏差) 最后一个例子如何使用所有32位,第一个位为1,表示负值? […]

printf()是否依赖于格式说明符的顺序?

#include main() { float x=2; float y=4; printf(“\n%d\n%f”,x/y,x/y); printf(“\n%f\n%d”,x/y,x/y); } 输出: 0 0.000000 0.500000 0 使用gcc编译4.4.3程序退出时出现错误代码12

为什么isnormal()说值不正常?

#include #include #include #include void PrintBytes( const float value ) { const char* const byte = ( const char* )&value ; for( size_t i = 0 ; i < sizeof( value ) ; i++ ) { printf( "%02hhx" , byte[i] ); } } int main(void) { float value = FLT_MIN; while( 1 ) { printf( […]

为什么我不能乘以浮动?

可能重复: 处理浮点数中的精度问题 我很惊讶为什么我试图将C中的浮点数(与GCC 3.2)相乘并且它没有按照我的预期进行。作为示例: int main() { float nb = 3.11f; nb *= 10; printf(“%f\n”, nb); } 显示:31.099998 我对浮动的实现方式及其产生这种意外行为的原因感到好奇吗?