首页 > 解决方案 > 在评估三角函数时,如何让 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))

标签: cfloating-point

解决方案


如果您tanf希望计算发生在float而不是double.

另请注意,使用浮点数时,最好使用整数类型,int i例如从 0 到 19 计数,然后使用pi * i / 20角度。如需进一步阅读,请参阅浮点数学是否损坏?


推荐阅读