Tag: 浮点转换

将4个原始字节转换为32位浮点

我正在尝试从eeprom重构一个32位浮点值。 eeprom存储器(0-4)中的4个字节是:B4 A2 91 4D 并且PC(VS Studio)正确地重建它为3.054199 * 10 ^ 8(我知道浮点值应该在那里) 现在我将这个eeprom从8位Arduino中读取,所以不确定它是否是编译器/平台的东西,但是当我尝试将4个字节读入32位双字符,然后将其强制转换为浮点数时,我得到的价值甚至不是很接近。 假设使用标准ansi-c编译器无法自动完成转换,如何将4个字节手动解析为浮点数?

左移Float类型

在尝试时遇到编译器错误 float_val=float_val<<1; 它给出了一个错误,说“错误C2296:'<<':非法,左操作数的类型为'float'” 不能左移左浮球? 为什么会这样?

为什么double可以存储比unsigned long long更大的数字?

问题是,我不太清楚为什么double可以存储比unsigned long long更大的数字。 由于它们都是8字节长,所以64位。 在无符号长long中,所有64位用于存储值,另一方面double表示1表示,11表示指数,52表示尾数。 即使用于尾数的52位将用于存储没有浮点的十进制数,它仍然有63位…… 但LLONG_MAX明显小于DBL_MAX …… 为什么?

使用浮点数和整数

我已经创建了一个ATM程序,它将钱存入一个人的账户。 当该人取出提款时,它会从账户中扣除50%的附加费。 我遇到的问题是在这个程序中使用整数和浮点数。 我将整数帐户转换为浮点数,但是当我尝试打印语句时收到错误消息。 有人能告诉我我做错了什么吗? #include int main (void) { int account = 2000; int withdrawal; float charge = 0.50; printf (“How much money would you like to take out? “); scanf (“%i”, &withdrawal); while (withdrawal % 5 != 0) { printf (“Withdrawal must be divisible by 5. “); scanf(“%i”, &withdrawal); } account = ((float) […]

随机浮点数

我编写了这个函数来获得0 … 1之间的伪随机浮点数: float randomFloat() { float r = (float)rand()/(float)RAND_MAX; return r; } 但是,它总是返回0.563585。 无论我运行控制台应用程序多少次,都是相同的数字。 编辑: 如果需要,这是我的整个申请: #include #include float randomFloat() { float r = (float)rand() / (float)RAND_MAX; return r; } int main(int argc, char *argv[]) { float x[] = { 0.72, 0.91, 0.46, 0.03, 0.12, 0.96, 0.79, 0.46, 0.66, 0.72, 0.35, -0.16, -0.04, -0.11, […]

与浮点数混淆

int main() { float x=3.4e2; printf(“%f”,x); return 0; } 输出: 340.000000 //没关系 但如果写x=3.1234e2则输出为312.339996 ,如果x=3.12345678e2则输出为312.345673 。 为什么输出会像这样? 我想如果我写x=3.1234e2 ,输出应该是312.340000 ,但实际输出是312.339996使用GCC编译器。

限制浮点精度?

有没有办法将浮点数舍入为2分? 例如: 3576.7675745342556变为3576.76 。

C浮点精度

可能重复: 浮点比较 我对C / C ++中float的准确性有疑问。 当我执行以下程序时: #include int main (void) { float a = 101.1; double b = 101.1; printf (“a: %f\n”, a); printf (“b: %lf\n”, b); return 0; } 结果: a: 101.099998 b: 101.100000 我相信浮点数应该是32位所以应该足以存储101.1为什么?

浮点类型的有效位数

C中类型float的描述提到有效位数是6 。 然而, float f = 12345.6; 然后使用printf()打印它不打印12345.6 ,它打印12345.599609 。 那么对于浮点类型,“6位有效数字”(或“ double情况下为15”)意味着什么呢?

比较浮动和双重

#include int main(void){ float a = 1.1; double b = 1.1; if(a == b){ printf(“if block”); } else{ printf(“else block”); } return 0; } 打印:else阻止 #include int main(void){ float a = 1.5; double b = 1.5; if(a == b){ printf(“if block”); } else{ printf(“else block”); } return 0; } 打印:如果阻止 这背后的逻辑是什么? 编译使用:gcc-4.3.4