c++ - 如何在 Intel ICC 中启用 long double
问题描述
我在 MacOS 上,并且正在按照指南使用英特尔® 数学库来实施第一个示例:
// real_math.c
#include <stdio.h>
#include <mathimf.h>
int main() {
float fp32bits;
double fp64bits;
long double fp80bits;
long double pi_by_four = 3.141592653589793238/4.0;
// pi/4 radians is about 45 degrees
fp32bits = (float) pi_by_four; // float approximation to pi/4
fp64bits = (double) pi_by_four; // double approximation to pi/4
fp80bits = pi_by_four; // long double (extended) approximation to pi/4
// The sin(pi/4) is known to be 1/sqrt(2) or approximately .7071067
printf("When x = %8.8f, sinf(x) = %8.8f \n", fp32bits, sinf(fp32bits));
printf("When x = %16.16f, sin(x) = %16.16f \n", fp64bits, sin(fp64bits));
printf("When x = %20.20Lf, sinl(x) = %20.20Lf \n", fp80bits, sinl(fp80bits));
return 0;
}
按照指南中的指示,我编译:
icc real_math.c
当我执行时,我得到:
When x = 0.78539819, sinf(x) = 0.70710677
When x = 0.7853981633974483, sin(x) = 0.7071067811865475
When x = 0.78539816339744830952, sinl(x) = 0.00000000000000000000
我进行了广泛而广泛的搜索,所有示例似乎都表明这应该是微不足道的。我错过了什么?
我试图传递-long_double
给icc
,但没有任何变化。
解决方案
好的,我想通了。此问题是由于我遗漏了 1 个字符而导致的错误:L
. 具体来说,不知何故,在我自己的计算机代码中,我有这个:
printf("When x = %20.20Lf, sinl(x) = %20.20f \n", fp80bits, sinl(fp80bits));
正确的代码是这样的(注意%20.20f
vs %20.20Lf
):
printf("When x = %20.20Lf, sinl(x) = %20.20Lf \n", fp80bits, sinl(fp80bits));
我什至不确定这是怎么发生的,但这是根本原因。
感谢大家的快速回答,并感谢@PeterCordes 将我链接到Godbolt。
推荐阅读
- java - 嵌套类:`OuterClass.this.someAttribute`?
- python - 如何在 Chrome 中打开 URL 并获取其内容?
- ssh - 无法通过 SSH 连接到数字海洋新水滴
- r - 如何根据ggplot中数字列的值为绘制点分配颜色渐变
- tensorflow - 在 Keras 中未检测到 GCP GPU
- angular - node_modules/@types/googlemaps/index.d.ts 中的错误——元组类型元素列表不能为空
- python-3.x - Matplotlib 中的极坐标图,通过映射到笛卡尔坐标
- firebase-realtime-database - 无法删除 Firebase 数据库控制台中的节点错误
- python - 硒单击href按钮
- django - 在 ManyToManyField 上注释 FilteredRelation 不会返回任何内容