0

私は Lisp インタープリターに取り組んでおり、有理数を実装しています。1/3 のような数値を表すことができるという点で、double よりも優れていると思いました。結果を比較するためにいくつかの計算を行いました。私はその結果に驚いた

ダブルス付き

(* 3.0 (/ 1.0 3.0)) -> 1
(* 3.0 (/ 4.0 3.0)) -> 4
(* 81.0 (/ 1.0 81.0)) -> 1

比率で:

(* 3 (/ 1 3)) -> 1
(* 3 (/ 4 3)) -> 4
(* 81 (/ 1 81)) -> 1

浮動小数点演算の結果が正確なのはなぜですか? 精度が失われる必要があります。double は無限の桁数を格納できません。それとも何かが恋しいですか?

小さな C アプリケーションで簡単なテストを行いました。同じ結果です。

#include <stdio.h>

int main()   
{  
    double a1 = 1, b1 = 3;  
    double a2 = 1, b2 = 81;  

    printf("result : %f\n", a1 / b1 * b1); 
    printf("result : %f\n", a2 / b2 * b2);

    return 0;  
}  

出力は次のとおりです。

結果: 1.000000
結果: 1.000000

製造業

マーティン

4

1 に答える 1