【发布时间】:2020-01-16 14:12:44
【问题描述】:
我对 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))
【问题讨论】:
-
float(tanangle) = 0.0;是定义tanangle的一种非常奇怪的方式。大部分人写float tanangle = 0.0;,用括号写会让人迷惑。你为什么这样写? -
对,对不起。我不习惯声明变量,这可能是 Python 遗留下来的习惯。
标签: c floating-point