草庐IT

double-buffering

全部标签

JAVA double精度丢失问题

double类型精度丢失问题:0.1*0.1使用计算器计算是0.01,代码里却是0.010000000000000002publicclassHelloWorld{publicstaticvoidmain(String[]args){doublenumber1=0.1; doublenumber2=0.1; doubleresult=number1*number2; System.out.println("使用double运算结果:"+result);}}为什么会这样呢?这就是精度丢失问题造成的。为什么会出现精度丢失?因为计算机只能识别0和1,即二进制,无论哪种编程语言,都需要翻译成二进制才能

java - 如何将 16 位 PCM 音频字节数组转换为 double 或 float 组?

我正在尝试对.3gpp音频文件执行快速傅里叶变换。该文件包含来自手机麦克风的44100kHz的5秒小录音。出于显而易见的原因,我能找到的每个JavaFFT算法都只接受double[]、浮点[]或复杂[]输入,但我正在以字节数组的形式读取音频文件,所以我有点对我从这里去哪里感到困惑。我唯一能找到的是上一个问题的答案:AndroidaudioFFTtoretrievespecificfrequencymagnitudeusingaudiorecord但我不确定这是否是正确的程序。任何有见识的人? 最佳答案 别无选择。您必须运行一个循环并

android - AudioFlinger(59) : RecordThread: buffer overflow when Activity is paused?

我有一个应用程序,它由一个服务和一个Activity组成,该Activity可能由该服务针对某些事件启动。该服务可以创建和使用AudioRecord和AudioTrack类——此时显示应用程序的Activity。问题是如果Activity暂停(即调用onPause())我开始收到RecordThread:缓冲区溢出错误?我的猜测是AudioRecorder在主线程中运行。而且,即使它是由服务创建的,当Activity暂停读取时缓冲区也会溢出?AudioRecorder读取是否必须在单独的线程中完成,即使它正在服务中运行?非常感谢任何帮助,谢谢。 最佳答案

android - 墙纸因错误而崩溃 - queueBuffer : error queuing buffer to SurfaceTexture

动态壁纸崩溃,代码如下publicvoidrender(){Canvascanvas=null;try{canvas=this._surfaceHolder.lockCanvas(null);synchronized(this._surfaceHolder){this.onDraw(canvas);}}catch(Exceptione){Log.w("Surfaceholder",e.toString());}finally{if(canvas!=null){this._surfaceHolder.unlockCanvasAndPost(canvas);}}}protectedvoid

android - 为什么使用 float 而不是 double 不会提高 Android 性能?

由于所有智能手机(至少是我能找到规范的智能手机)都有32位处理器,我想在大量计算中使用单精度浮点值的性能会比double值好得多。然而,情况似乎并非如此。即使我避免类型转换,并尽可能使用FloatMath包,在比较基于float的方法和基于double的方法时,除了内存使用外,我几乎看不到任何性能改进。我目前正在开发一个相当大的计算密集型声音分析工具,它每秒进行数百万次乘法和加法运算。由于32位处理器上的double乘法需要几个时钟周期,而单精度需要1个时钟周期,我假设类型更改会很明显......但事实并非如此:-(对此有什么好的解释吗?是因为DalvikVM的工作方式,还是什么?

android - 如何使用 Android View 数据绑定(bind)格式化 double?

假设我有一个Earthquake类,它有一个字段publicfinaldoublemagnitude;,我有一个类似于这个的布局:...注意我必须使用"@{String.format(earthquake.magnitude)}"来使用这个字段,否则我会得到这个错误:Cannotfindthesetterforattribute'android:text'onandroid.widget.TextViewwithparametertypedouble.不幸的是,这会导致双重打印完全准确。如何设置显示的double值的格式? 最佳答案

c++ - double 到 unsigned int/char

我读了here,即:根据C99§6.3.1.4脚注50:Theremainderingoperationperformedwhenavalueofintegertypeisconvertedtounsignedtypeneednotbeperformedwhenavalueofrealfloatingtypeisconvertedtounsignedtype.Thus,therangeofportablerealfloatingvaluesis(−1,Utype_MAX+1).现在,我对以下之间的细微差别感兴趣(这次是针对C++03!):doubled1=257;doubled2=-2

c++ - 将多边形坐标从 Double 转换为 Long 以用于 Clipper 库

我有两个多边形,它们的顶点存储为Double坐标。我想找到这些多边形的交叉区域,所以我正在查看Clipperlibrary(C++版本)。问题是,Clipper仅适用于整数数学(它使用Long类型)。有没有一种方法可以用相同的比例因子安全地转换我的两个多边形,将它们的坐标转换为Longs,使用Clipper执行相交算法,并使用相同的比例缩小生成的相交多边形,然后将其转换回来到Double而不会损失太多精度?我不太清楚该怎么做。 最佳答案 您可以使用一个简单的乘数在两者之间进行转换:/*Usingpower-of-twobecause

c++ - 如何在不丢失精度的情况下将 float 转换为 double(均以 IEEE-754 表示形式存储)?

我的意思是,例如,我有以下以IEEE-754单精度编码的数字:"01000001101111101100110011001100"(approximately23.85indecimal)上面的二进制数是用文字串存储的。问题是,如何将这个字符串转换为IEEE-754double表示(有点像下面的,但值不一样),而不损失精度?"0100000000110111110110011001100110011001100110011001100110011010"相同的数字以IEEE-754double编码。我曾尝试使用以下算法先将第一个字符串转换回十进制数,但它会失去精度。numindecim

c++ - Protocol Buffer ;将数据保存到磁盘并加载回问题

我在将Protobuf数据存储到磁盘时遇到问题。我的应用程序使用ProtocolBuffer通过套接字传输数据(工作正常),但是当我尝试将数据存储到磁盘时它失败了。实际上,保存数据报告没有问题,但我似乎无法再次正确加载它们。任何提示将不胜感激。voidwriteToDisk(DataList&dList){//openstreamsintfd=open("serializedMessage.pb",O_WRONLY|O_CREAT);google::protobuf::io::ZeroCopyOutputStream*fileOutput=newgoogle::protobuf::io