利用C++通过函数调用编程一按不同的精度求圆周率的程序

利用C++通过函数调用编程一按不同的精度求圆周率的程序,第1张

#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程序精度问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10067530.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存