1572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams/* 2572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Copyright (C) 2013 The Android Open Source Project 3572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 4572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * you may not use this file except in compliance with the License. 6572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * You may obtain a copy of the License at 7572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 8572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 10572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Unless required by applicable law or agreed to in writing, software 11572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * See the License for the specific language governing permissions and 14572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * limitations under the License. 15572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */ 16572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 17572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspackage com.example.android.rs.matherr; 18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.res.Resources; 20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.*; 21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.lang.Float; 22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.lang.Math; 23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class MathErr { 25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private RenderScript mRS; 26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Allocation mAllocationSrc; 27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Allocation mAllocationRes; 28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private ScriptC_math_err mScript; 29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private java.util.Random mRand = new java.util.Random(); 30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private final int BUF_SIZE = 4096; 32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float mSrc[] = new float[BUF_SIZE]; 33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float mRef[] = new float[BUF_SIZE]; 34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float mRes[] = new float[BUF_SIZE]; 35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams MathErr(RenderScript rs) { 37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRS = rs; 38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mScript = new ScriptC_math_err(mRS); 39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mAllocationSrc = Allocation.createSized(rs, Element.F32(rs), BUF_SIZE); 41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mAllocationRes = Allocation.createSized(rs, Element.F32(rs), BUF_SIZE); 42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams testExp2(); 44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams testLog2(); 45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void buildRand() { 48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (int i=0; i < BUF_SIZE; i++) { 49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mSrc[i] = (((float)i) / 9) - 200; 50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams //mSrc[i] = Float.intBitsToFloat(mRand.nextInt()); 51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mAllocationSrc.copyFrom(mSrc); 53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void logErr() { 56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mAllocationRes.copyTo(mRes); 57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (int i=0; i < BUF_SIZE; i++) { 58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams int err = Float.floatToRawIntBits(mRef[i]) - Float.floatToRawIntBits(mRes[i]); 59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams err = Math.abs(err); 60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (err > 8096) { 61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams android.util.Log.v("err", "error " + err + " src " + mSrc[i] + " ref " + mRef[i] + " res " + mRes[i]); 62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void testExp2() { 67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams android.util.Log.v("err", "testing exp2"); 68572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams buildRand(); 69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mScript.forEach_testExp2(mAllocationSrc, mAllocationRes); 70572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (int i=0; i < BUF_SIZE; i++) { 71572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRef[i] = (float)Math.pow(2.f, mSrc[i]); 72572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 73572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams logErr(); 74572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 75572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 76572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void testLog2() { 77572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams android.util.Log.v("err", "testing log2"); 78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams buildRand(); 79572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mScript.forEach_testLog2(mAllocationSrc, mAllocationRes); 80572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (int i=0; i < BUF_SIZE; i++) { 81572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRef[i] = (float)Math.log(mSrc[i]) * 1.442695041f; 82572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 83572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams logErr(); 84572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 85572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 86572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams} 87