プロが教えるわが家の防犯対策術!

fabs をつかうと、数値が正しくなる場合、型の計算の互換性の問題であったと思いますか。
Cレファレンスマニュアルというご本には、整数絶対値関数(abs, labs, およびllabs)は stdlib.hに定義されている と書いてありますけど。

A 回答 (5件)

もしかして、質問者さんは、


fabs(x1-x2)<EPS と
abs(x1-x2)<EPS で結果が変わるのは何故かということを、質問されていますか?

absは戻り値が整数型のため、小数点以下は切り捨てられます。
従って、x1=1.5 x2 = 1.7でabs(x1-x2)は、abs(-0.2)のため、
結果は0になります。
よって、abs(x1-x2)<EPS は真になります。
一方、fabs(x1-x2)は、結果が0.2になるため、
fabs(x1-x2)<EPS は偽になります。
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます。なるほどと思い、その通りそうとおもいました。わかりやすかたです。

お礼日時:2022/10/11 10:24

「答えが変わる」というのは「何と何を比較して」変わる, ということ?



あと余計かもしれないけど 10e-10 に違和感がある. 1e-9 じゃダメなんだろうか.
    • good
    • 0

>例えば、EPSが、10e-10と浮動小数点で、あらわされ、


>fabs(x1-x2)<EPS のように大小比較をする場合
>に、答えが変わるのは、方による演算の誤差ですか?

多分、うまく行かないのは、fabs(x1-x2)に問題があるのではなくて、他の箇所に問題があるからだと思います。
ソース全体を提示された方が解決につながると思います。
ソース前提を提示されてはいかがでしょうか。
その際は、
1.OS、
2.コンパイラ
3.そのソースの仕様(なにを行っているか)
4.期待する結果
5.現状の不具合の内容
を提示すると更に良いかと。
    • good
    • 0

> fabs をつかうと、数値が正しくなる場合、


普通は、結果の数値は正しいです。

結果が正しくない場合は、プログラムのバグなので、間違いを探して修正しましょう。

> 整数絶対値関数(abs, labs, およびllabs)は stdlib.hに定義されている と書いてありますけど。
浮動小数点絶対値関数 fbas は、math.hです。
    • good
    • 3
この回答へのお礼

どう思う?

エラーでなく、数値が違います。

お礼日時:2022/10/10 10:47

具体例くれ.

    • good
    • 2
この回答へのお礼

ありがとう

例えば、EPSが、10e-10と浮動小数点で、あらわされ、
fabs(x1-x2)<EPS のように大小比較をする場合
に、答えが変わるのは、方による演算の誤差ですか?

お礼日時:2022/10/10 10:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!