gcc - 为什么 gcc 将浮点小数 #defines 评估为零?
问题描述
怎么(float)_micron_to_meter
等于零?鉴于:
//convert microns to meters via multiplication
#define _micron_to_meter (1 / 1000000)
但是
printf("factor: %f\n", (float)_micron_to_meter);
打印出 0.000000。
哦.. duh...我不敢相信我忘记了这一点。下面回答。我犹豫要不要发布这个,但我在这里做了相当广泛的搜索,找不到任何其他关于它的帖子。肯定还有其他一些程序员会像我在这里一样一无所知。如果您找到另一个,请随意将其标记为重复,但请检查为什么找不到该帖子?
解决方案
请注意任何未来的 C 程序员(我/知道/这个,我不确定我是如何错过它的)。如果您有一个由整数组成的小数定义,例如
//convert microns to meters via multiplication
#define _micron_to_meter (1 / 1000000)
那么值为零。在它脱离 () 之前它已经为零了。因为 1 被假定为整数,并且 (int)1 除以任何大于 0 的值都小于 1,整数只能从 1 到 0。如果这样做:
#define _micron_to_meter (1.0 / 1000000)
然后它按预期工作,因为假设 1.0 是浮点数。
推荐阅读
- mysql - 连接四个不同的表
- java - 重复 for 循环但结果不同。如何删除重复的代码
- c++ - 如何解释 std::launder 的可达性要求?
- kotlin - 为什么要使用 Kotlin 伴生对象而不是初始化程序块来创建?
- typescript - 有没有办法接受具有任意数量的字段和任何类型但一个必需字段的对象数组,而不是使用“任何”类型?
- doctrine - 无法使查询生成器正常工作以查找过去 7 天的所有帖子
- python - Elasticsearch 助手返回生成器类,需要字典
- javascript - 如何在选项选择时将文本区域标记为“必需”
- javascript - 验证
v-model 对象而不是数组未正确添加 - xampp - 在 xampp 中创建子域的最佳和简单方法是什么