2008年01月09日

ふと思ったのですが・・・

洗わないアライグマという、アライグマとしてのアイデンティティを失ってしまったアライグマというのはいるのでしょうか?
posted by 台北猫々 at 22:17| Comment(0) | TrackBack(0) | 日記

高精度数値計算(固定小数点演算)

なんとか、とりあえず完了といっていい状態になりました。
どんな感じになったかというと、JUnitで表すとこんな感じ
になります。

"1+2*(3+2)"のような演算式の文字列を渡すと演算結果を返す
クラスです。内部では浮動小数点演算を行っていないので、
例えば小数点以下50桁まで精度保証なんてこともできます。

ソースの方は、ホームページの方に、近々アップします。猫


import static org.junit.Assert.*;
import org.junit.Test;

public class CalculatorTest {

@Test
public void testExecCalculate() {
Calculator c = new Calculator();
assertEquals("+0", c.execute("+0", 0));
assertEquals("+18", c.execute("(1+2)*2*(1+2)", 3));
assertEquals("+18", c.execute("(((1+2)*2*(1+2)))", 3));
assertEquals("+1.0000", c.execute("((1+2)/(1+2))", 3));
assertEquals("-1.6000", c.execute("((3+4+2*5)/5)+3-(2+2)*2", 3));
assertEquals("+6.6234311111222223333344444", c.execute("3.1111111111222223333344444+3.51232", 10));
assertEquals("+0.012895213625", c.execute("0.2345*0.2345*0.2345", 3));
assertEquals("+0.41666666666666666666666666666666666666666666666666", c.execute("5/12", 50));
assertEquals("+1299", c.execute("((1+2*2*(1+2))*100)-1", 0));
assertEquals("+1300", c.execute("(1+2*2*(1+2))*100", 0));
assertEquals("-1300", c.execute("-(1+2*2*(1+2))*100", 0));
assertEquals("+1299.9999", c.execute("((1+2*2*(1+2))*100)-1*0.0001", 0));
assertEquals("+1299.9999", c.execute("((1+2*2*(1+2))*100)-(1*0.0001)", 0));
assertEquals("+0.01234567901234567901234567901234567901234567901234", c.execute("1/3/3/3/3", 50));
assertEquals("+0.00000", c.execute("0/(((1+2*2*(1+2))*100)-(1*0.0001))", 0));
}

}


良かったらクリックお願いします→banner_01.gif
posted by 台北猫々 at 20:44| Comment(0) | TrackBack(0) | 日記