#include <iostream>
using namespace std;
double pi(double eps){
double p=0,t=1;
int i=1,f=1;
while(t>eps){
p+=(ft);
i+=2;
f=-f;
t=10/i;
}
return 4p;
}
int main(){
double eps, p;
cout <<"计算精度:";
cin >>eps;
p=pi(eps);
cout <<"PI=" <<p <<endl;
return 0;
}
在shader的两个文件中,有的变量定义了 lowp 这个属性,那么就需要知道,这个属性到底是做什么用的。
它是修饰变量的精度的,代表着低精度。那么肯定就有高精度和中精度。这些精度被称作精度限定符。
没有精度修饰符的类型:字符常量,布尔型。
当浮点数和整数构造器不含有带精度修饰符的参数时,也不需要精度修饰符。
对于整型精度来说,高精度和中精度整型范围都可以转化相同精度修饰符表示的float型。例如: highp int 可以换成 highp float , mediump int 也可以换成 mediump float ,但是低精度不行,因为浮点型的低精度范围没有整型范围大。
精度修饰符要放在类型的前面。例如:
如果要在着色器中设定默认的精度,则一定要写在源码的起始位置。
指定默认的精度修饰符的方法如下:
其中,
例如:
VertexShader 也就是顶点着色器中的 float 和 int 都是有默认的精度修饰符 highp 的。如果不想修改,也是可以的。
但是, FragmentShader 片元着色器, float 类型是没有默认精度的,所以必须为 FragmentShader 中的 float 类型的指定一个默认的精度修饰符。或者在每一个 float 前面都添加精度修饰符。
在 VertexShader 顶点着色器中,有如下的预定义的全局默认精度修饰符:
在 FragmentShader 片元着色器中,有如下的预定义全局默认精度修饰符
所以从预设中也可以看出,为什么 FragmentShader 中浮点型需要设置全局默认或者每个都要设置精度了,着色器默认预设中没有 float 类型的精度。
代码有1个错,错在最后一行:
long l=(float)f;//强制转换会舍去小数部分(不是四舍五入)
改成
long l=(long)f;//强制转换成long,
String[] args和String arg[] ,在声明“单个变量”时同义,这2句意思相同
但在声明“多个变量”时意思不同:
String[] a,b;//代表声明a,b两个数组
String a[],b//代表声明一个数组,一个对象。
以上就是关于利用C++通过函数调用编程一按不同的精度求圆周率的程序全部的内容,包括:利用C++通过函数调用编程一按不同的精度求圆周率的程序、第十一节—关于着色器程序中的精度、Java程序精度问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)