Tag:

将双数组转换为unsigned short?

Prob = *((unsigned short*)(Prob)); Prob = (unsigned short)(Prob); 这对我不起作用。 如何正确转换?

C浮点和双重比较

我在比较C中的简单浮点数和双精度数,特别是两者的值8.7。 现在我为每个变量分配8.7,当我打印时,我得到两个值的8.7000的结果。 为什么编译器添加了这些零。 我想问的主要问题是还有任何我没有看到的数字,如隐藏在尾随零之后的数字。 我读到由于缺乏精确度,我不应该使用float进行这样的比较,但是我认为它具有如此小的值,它确实可以存储8.7,并且需要一定程度的精确度来与另一个8.7值进行比较? 我唯一担心的是它实际上是在内存中的某个位置表示为例如8.70000003758或其他东西,这会让我的比较失败? 我试图使用%.20f打印f以查看可能隐藏的任何其他数字,但我认为只是创建了数字,否则不存在,因为数字的整体精确度变为8.6918734634834929或类似的东西。

如何在文件*流中的特定点停止并扫描某些值?

我有一个名为test.txt的文件,该文件包含: 10.213123 41.21231 23.15323 当我看到我希望扫描后的3个数字,如下所示: x = 10.213123 y = 41.21231 z = 23.15323 我有点困惑,因为在这里,fgets扫描整条线,我怎样才能将3个数字扫描成双线? 因为数字可以是各种长度? 我这样做是为了打印出它从文件中读取的内容,但我无法绕过它。 void print_lines(FILE *stream) { char line[MAX_LINE_LENGTH]; while (fgets(line, MAX_LINE_LENGTH, stream) != NULL) { fputs(line, stdout); } }

为什么我的程序只打印到小数点后6位?

我已经创建了一个程序来计算从零到无穷大的积分值,但是当我打印我的答案时,它只打印到6位小数,有人可以告诉你这是为什么吗? 首先十分感谢 :) #include #include #include double integral_Function(double x){ double value; value = 1/((1+ pow(x, 2))*(pow(x, 2/3))); return value; } double trapezium_Rule(double lower, double upper, int n){ double h; double total; h = (upper – lower)/n; total = (h/2) * (integral_Function(upper) + integral_Function(lower)); for(int i = 1; i < n; i++){ total = total + […]

如何打印最大可能的浮点数并在C中加倍?

对于以下代码, #include #include #include int main(void) { printf(“double max = %??\n”, DBL_MAX); printf(“double min = %??\n”, DBL_MIN); printf(“double epsilon = %??\n”, DBL_EPSILON); printf(“float epsilon = %??\n”, FLT_EPSILON); printf(“float max = %??\n”, FLT_MAX); printf(“float min = %??\n\n”, FLT_MIN); return 0; } 为了让printf将各种数量显示为适当大小的十进制数,我必须使用哪些说明符代替??

使用浮动和双倍时,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值?

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

当单个精度浮点数大约为零时,它的近似分辨率是多少

我存储了许多经度和纬度作为doubles ,我想知道我是否可以将它们存储为floats 。 要回答这个问题,当存储的值是经度/纬度(-180到+180)时,我需要知道单精度浮点数的近似分辨率。

C – 双精度求和

我有双格式精度的问题。 示例示例: double K=0, L=0, M=0; scanf(“%lf %lf %lf”, &K, &L, &M); if((K+L) <= M) printf("Incorrect input"); else printf("Right, K=%f, L=%f, M=%f", K, L, M); 我的测试输入: K = 0.1,L = 0.2,M = 0.3 – >条件但是转到‘else’语句。 我怎么能纠正这种差异? 还有其他方法可以求和吗?

-1.0和1.0之间的双倍精度是多少?

在我看过的一些音频库中,音频样本通常表示为double或float,范围为-1.0到1.0。 在某些情况下,这很容易让分析和综合代码抽象出底层数据类型实际可能是什么(签名long int,unsigned char等)。 假设IEEE 754,我们的密度不均匀。 随着数量接近零,密度增加。 这意味着我们对接近-1和1的数字的精度较低。 如果我们可以为我们要转换的基础数据类型表示足够数量的值,则此非均匀数密度无关紧要。 例如,如果底层数据类型是unsigned char,我们只需要介于-1和1(或8位)之间的256个值 – 使用double显然不是问题。 我的问题是:我有多少精度? 我可以安全地转换为32位整数,而不会丢失吗? 为了扩展这个问题,在没有丢失的情况下,安全地转换为32位整数/从32位整数转换的值必须是多少? 谢谢!