我的问题是:有没有办法在提供单精度或双精度参数时总是使用数学函数的扩展精度版本 - 例如sqrt,exp和&c;而不使用显式强制转换?
例如,我想要这个功能,没有演员的麻烦:
float x=15.0;
float answer;
answer=sqrt((long double)x);
这是在科学计算的背景下进行的,其中需要包含这些函数的循环的许多迭代。尽管在过程结束时我只需要单精度,但在每次迭代期间产生的浮点错误可以在几千次迭代之后求和。感谢。
答案 0 :(得分:2)
在循环之前转换为long double并在结束时将结果转换回单精度?
答案 1 :(得分:2)
在C
如果你#include <math.h>
声明了返回double
和接受double
参数这样的函数,编译器会隐式地为你做演员。
#include <math.h>
/* ... */
int x = sqrtl(sqrt(sqrtf(42)));
/* 1 ^^ implicit cast of int to float */
/* 2 ^^^^^^^^^ implicit cast of float to double */
/* 3 ^^^^^^^^^^^^^^^ implicit cast of double to long double */
/* 4 ^^^^^^^^^^^^^^^^^^^^^^ implicit cast of long double to int */