我正在研究一个从表达式产生汇编代码的程序。其中一个需要的功能是棕褐色(x)的目前工程,并使用下面的代码序列(地址在运行时填写):为什么printf为FPTAN结果显示-1。#IND?
fld [0x00C01288];
fld st(0);
fsin;
fld st(1);
fcos;
fdivp;
fst [0x0030FA8C];
不过,我想用FPTAN操作码代替,因此我尝试使用以下代码:
fld [0x00C01288];
fptan;
fincstp;
fst [0x0030FA8C];
该测试程序使用的printf来显示储存在0x30FA8C的结果,但对于第二序列中的结果显示为-1#IND(使用COS和sin作品第一。精细)。如果我尝试在调试器中检查内存地址或浮点堆栈顶部的值,它将显示为正确的数字。
所以,我的问题是:为什么printf显示-1。#IND,我该如何解决它?
在0x00C01288的值是双精度0.5 在这两种情况下的结果是〜0.5463024898
我首先想到的是,该值被存储为相同数量的不同表示,但检查等储存在0x0030FA8C值在两种情况下都显示为0x3FE17B4F5BF3474A。
我不明白,为什么相同的输入printf函数可以产生不同的输出...
任何帮助或建议,将不胜感激。
编辑:来源,其中的printf被称为:
#include "FridgeScript.h"
#include <stdio.h>
#include <math.h>
char test[] = "a=tan(0.5);";
int main(int c, char** s)
{
unsigned int SC = FSCreateContext();
double a = 0.0;
FSRegisterVariable(SC, "a", &a);
unsigned int CH = FSCompile(SC, test);
if(CH) FSExecute(SC, CH);
printf("a: %.10g\r\n", a);
printf("hex a: %I64X", a);
FSDestroyContext(SC);
return 0;
}
你可能会显示使用printf函数的源代码吗? – veefu 2009-04-13 12:33:03
还有很多其他的事情......但我会加入它。 – jheriko 2009-04-13 12:45:32
“-1。#IND”是printf说NaN的方式。我没有其他帮助来添加,但这可能是一个有用的琐事...... – RBerteig 2009-04-17 07:56:37