c - 在评估三角函数时,如何让 C 区分单浮点数和双浮点数?
问题描述
我对 C 编程很陌生。对于单精度和双精度浮点数,我必须以 pi/20 的步长打印 tan(0) 到 tan(pi/2) 的值。但是,当我使用不同的数据类型来存储浮点数时,单数和双数之间没有任何变化,我希望位数会发生变化。
#include <stdio.h>
#include <math.h>
#define PI 3.1415926
int main()
{
float angle = 0.0;
float pi_single = 3.1415926;
printf("single precision:\n");
while(angle < pi_single/2){
float(tanangle) = 0.0;
tanangle = tan(angle);
printf("tan(%f) = %f\n", angle, tanangle);
angle = angle + pi_single/20;
}
double angle2 = 0.0;
double pi_double = 3.141592653589793;
printf("double precision:\n");
while(angle2 < pi_double/2 ){
double(tanangle2) = 0.0;
tanangle2 = tan(angle2);
printf("tan(%lf) = %lf\n", angle2, tanangle2);
angle2 = angle2 + pi_double/20;
}
return 0;
}
我正在尝试复制此 Python 程序的结果:
import numpy as np
theta_32 = np.arange(0, np.pi/2+np.pi/20, np.pi/20, dtype = 'float32')
print('single precision')
for theta in theta_32:
print(theta)
print(np.tan(theta))
print()
[enter image description here][1]
theta_64 = np.arange(0, np.pi/2+np.pi/20, np.pi/20, dtype = 'float64')
print('double precision')
for theta_new in theta_64:
print(theta_new)
print(np.tan(theta_new))
解决方案
如果您tanf
希望计算发生在float
而不是double
.
另请注意,使用浮点数时,最好使用整数类型,int i
例如从 0 到 19 计数,然后使用pi * i / 20
角度。如需进一步阅读,请参阅浮点数学是否损坏?
推荐阅读
- amazon-web-services - 如何从 AWS 控制台重命名 AWS RDS 参数组
- apache-kafka - 仅一次添加到 Kafka 主题
- c++ - 如何在屏幕上显示分数 C++ SDL
- javascript - Javascript混合内存地址?(重置数组不起作用)
- mysql - 使用环境变量执行 MySQL init 命令创建数据库
- python - 如何根据字符串中的两个字符“[”和“]”进行拆分
- javascript - .map() 中的 .find 返回 undefined - JavaScript ES6
- javascript - EditableForm 打开时编辑 X-Editable 字段的值
- google-apps-script - 在列表中插入项目
- swift - 你可以在 Xcode Playgrounds 中运行 KVC 函数吗?