Tag: 浮点

C浮点数表示法

我注意到这段代码编译但我不明白为什么: int main() { double z = 0.000000000000001E-383DD; } 但我不确定数字末尾的DD意味着什么。 我看过标准,但没有提到这一点。 我从以下命令获得了这个数字: $ gcc -dM -E – < /dev/null #define __DBL_MIN_EXP__ (-1021) #define __FLT_MIN__ 1.17549435e-38F #define __DEC64_DEN__ 0.000000000000001E-383DD … 这可能是GCC扩展吗?

使用浮动和双倍时,c中的-0.0000是多少?

#include #include #define answer 3.141593 void main(int argc, char **argv) { float a = (argc – 2)?: strtod(argv[1], 0); printf(“double = %lf ,float = %f”, a-answer , a-answer); } 当我这样运行时: ./a.out 3.141593 输出是 double = -0.000000 ,float = -0.000000 为什么-0.00000 ? 如何使其输出0.000000 ? 我怎样才能做出a == answer ? 如果使用2的补码,怎么会有-0值?

sscanf使用c浮动

所以我有一个包含多个字符串的文件。 我应该使用fgets来读取每一行然后使用sscanf来打破字符串并将它们处理到我的结构中。 这是一个例子。 38L Lee, Victor; 2.8 第一个是id,第二个是名称,最后是gpa。 当我尝试使用sscanf读取gpa时,它的读数为0.0,而不是2.8。 这是我的代码。 bool getstu (FILE* fpstu, STU* pstu) { // Local Definitions int ioResult; char temp[100]; char *ptr; char tempStr[50]; // Statements fgets(temp, sizeof(temp), fpstu); { ptr = temp; sscanf(ptr, “%3s”, pstu->id); ptr += strlen(pstu->id) + 1; sscanf(ptr, “%[^;]”, tempStr); pstu->name = aloName(tempStr); ptr += strlen(tempStr) + […]

如何获得最大的精度浮点数据类型的实现及其printf说明符?

或者换句话说, intmax_t和%jd是否等价,但对于浮点数? 这已经被问到了这里的一个侧面问题,但问题是如此之大,以至于我认为人们忘了回答这个问题。 也被标记为c ++,我正在寻找交流解决方案。 相关问题: C99中是否有固定尺寸的浮动和双重类型?

Typecasting指向浮点指针的指针

我正在尝试做以下事情 int a[8]={1,2,3,4,5,6,7,8}; printf(“%f\n”, *(float *)a); printf(“%f\n”, *((float *)a+1)); printf(“%f\n”, *((float *)a+2)); printf(“%f\n”, *((float *)a+3)); printf(“%f\n”, *((float *)a+4)); printf(“%f\n”, *((float *)a+5)); printf(“%f\n”, *((float *)a+6)); printf(“%f\n”, *((float *)a+7)); 我明白了 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 我试图以这种方式打印元素的原因是因为,我想将指向数组的int指针强制转换为浮点指针并将其作为另一个函数的参数传递给float * 。 看来这不行。 有人可以解释为什么这不起作用? int *ptr; function((float *)ptr); 如果我这样做,该函数不会读取指针正确指向的值..只返回0.0000 。

双打遭遇溢出吗?

是否可以使用double或float进行溢出(环绕)? 如果在x86或x64硬件上达到最大(或最小)值,会发生什么?

为什么1.2 * 30 = 35?

为什么这样: int main(void) { short w = 30; return 1.2 * w; } 回35?

正确的算法将二进制浮点“1101.11”转换为十进制(13.75)?

我用C编写了一个程序,将二进制 ( 1101.11 ) 表示的浮点数转换为十进制数( 13.75 )。 但是,我似乎无法从算法中获得正确的值。 将二进制浮点数转换为十进制的正确方法是什么? 我正在使用Dev CPP编译器(32位)。 算法定义如下: void b2d(double p, double q ) { double rem, dec=0, main, f, i, t=0; /* integer part operation */ while ( p >= 1 ) { rem = (int)fmod(p, 10); p = (int)(p / 10); dec = dec + rem * pow(2, t); […]

gcc -ffp-contract选项的差异

我对GNU GCC中的-ffp-contract标志有疑问(参见https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html )。 标志文档编写如下: -ffp-contract=off禁用浮点表达式收缩。 -ffp-contract=fast启用浮点表达式收缩,例如,如果目标具有对它们的本机支持,则形成融合乘法 – 加法运算。 -ffp-contract=on如果语言标准允许,则启用浮点表达式收缩。 目前尚未实施和处理等于-ffp-contract=off 。 默认值为-ffp-contract=fast 。 现在的问题是: 快速和开启有什么区别? FMA旁边是否还有其他收缩示例(或类似于融合多子类)?

%g如何舍入浮点数?

虽然我在printf()使用%g作为格式说明符,但有时它会在小数点后向上舍入到2个位置,有时会达到3个位置,有时会达到4个位置……它是如何做到的? 实际上我们应该使用%g而不是%f或%e作为浮点数?